{"version":3,"sources":["kendo.gantt.data.js"],"names":["f","define","$","undefined","GanttTask","GanttDataSource","isArray","extend","map","kendoData","kendo","data","Query","DataSource","TreeListDataSource","TreeListModel","PARENTIDFIELD","createDataSource","type","name","options","dataSource","Error","dateCompareValidator","input","filter","length","editable","model","field","attr","picker","widgetInstance","ui","dates","container","window","parent","indexOf","plannedStart","plannedEnd","start","end","value","parseDate","val","GanttDependency","Model","id","fields","predecessorId","successorId","GanttDependencyDataSource","init","fn","call","this","schema","modelBase","dependencies","predecessors","successors","push","apply","_dependencies","view","operator","toArray","create","parentId","defaultValue","validation","required","nullable","orderId","title","dateCompare","message","percentComplete","min","max","step","summary","expanded","duration","plannedDuration","isMilestone","_offset","newValue","i","Date","get","getTime","set","_offsetPlanned","base","parentIdField","sort","dir","add","task","_toGanttTask","insert","taskSiblings","index","_reorderSiblings","_resolveSummaryFields","taskParent","remove","children","taskAllChildren","_removeItems","_childRemoved","that","callback","tasks","taskChildren","fromView","taskId","order","_sort","taskLevel","level","taskTree","current","l","update","taskInfo","oldValue","offsetChildren","parentTask","offset","offsetChildrenPlanned","modelChangeHandler","e","sender","_resolveSummaryStart","_resolveSummaryEnd","_resolveSummaryPlannedStart","_resolveSummaryPlannedEnd","_resolveSummaryPercentComplete","bind","unbind","_updateSummary","getSummaryStart","currentMin","_updateSummaryRecursive","getSummaryEnd","currentMax","getSummaryPlannedStart","getSummaryPlannedEnd","getSummaryPercentComplete","aggregate","average","oldOrderId","direction","startIndex","endIndex","newIndex","siblings","Math","_createNewModel","accept","childCount","jQuery","amd","a1","a2","a3"],"mappings":"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","file":"kendo.gantt.data.min.js","sourcesContent":["/*!\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n*/\n(function (f, define) {\n define('kendo.gantt.data', [\n 'kendo.data',\n 'kendo.treelist'\n ], f);\n}(function () {\n var __meta__ = {\n id: 'gantt.data',\n name: 'GanttData',\n category: 'web',\n description: 'The Gantt Data.',\n depends: [\n 'data',\n 'treelist'\n ],\n hidden: true\n };\n (function ($, undefined) {\n var isArray = $.isArray, extend = $.extend, map = $.map, kendoData = kendo.data, Query = kendoData.Query, DataSource = kendoData.DataSource, TreeListDataSource = kendoData.TreeListDataSource, TreeListModel = kendoData.TreeListModel, PARENTIDFIELD = 'parentId';\n var createDataSource = function (type, name) {\n return function (options) {\n options = isArray(options) ? { data: options } : options;\n var dataSource = options || {};\n var data = dataSource.data;\n dataSource.data = data;\n if (!(dataSource instanceof type) && dataSource instanceof DataSource) {\n throw new Error('Incorrect DataSource type. Only ' + name + ' instances are supported');\n }\n return dataSource instanceof type ? dataSource : new type(dataSource);\n };\n };\n var dateCompareValidator = function (input) {\n if (input.filter('[name=end], [name=start], [name=plannedEnd], [name=plannedStart]').length) {\n var field = input.attr('name'), picker = kendo.widgetInstance(input, kendo.ui), dates = {}, container = input, editable, model;\n while (container !== window && !editable) {\n container = container.parent();\n editable = container.data('kendoEditable');\n }\n model = editable ? editable.options.model : null;\n if (!model) {\n return true;\n }\n if (field.indexOf('planned') >= 0) {\n dates.plannedStart = model.plannedStart;\n dates.plannedEnd = model.plannedEnd;\n } else {\n dates.start = model.start;\n dates.end = model.end;\n }\n dates[field] = picker ? picker.value() : kendo.parseDate(input.val());\n if (field.indexOf('planned') >= 0) {\n return dates.plannedStart <= dates.plannedEnd;\n } else {\n return dates.start <= dates.end;\n }\n }\n return true;\n };\n var GanttDependency = kendo.data.Model.define({\n id: 'id',\n fields: {\n id: {\n type: 'number',\n editable: false\n },\n predecessorId: { type: 'number' },\n successorId: { type: 'number' },\n type: { type: 'number' }\n }\n });\n var GanttDependencyDataSource = DataSource.extend({\n init: function (options) {\n DataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: GanttDependency,\n model: GanttDependency\n }\n }, options));\n },\n dependencies: function (id) {\n var predecessors = this.predecessors(id), successors = this.successors(id);\n predecessors.push.apply(predecessors, successors);\n return predecessors;\n },\n predecessors: function (id) {\n return this._dependencies('successorId', id);\n },\n successors: function (id) {\n return this._dependencies('predecessorId', id);\n },\n _dependencies: function (field, id) {\n var data = this.view();\n var filter = {\n field: field,\n operator: 'eq',\n value: id\n };\n data = new Query(data).filter(filter).toArray();\n return data;\n }\n });\n GanttDependencyDataSource.create = createDataSource(GanttDependencyDataSource, 'GanttDependencyDataSource');\n var GanttTask = TreeListModel.define({\n fields: {\n id: {\n type: 'number',\n editable: false\n },\n parentId: {\n type: 'number',\n defaultValue: null,\n validation: { required: true },\n nullable: true\n },\n orderId: {\n type: 'number',\n validation: { required: true }\n },\n title: {\n type: 'string',\n defaultValue: 'New task'\n },\n start: {\n type: 'date',\n validation: { required: true }\n },\n end: {\n type: 'date',\n validation: {\n required: true,\n dateCompare: dateCompareValidator,\n message: 'End date should be after or equal to the start date'\n }\n },\n percentComplete: {\n type: 'number',\n validation: {\n required: true,\n min: 0,\n max: 1,\n step: 0.01\n }\n },\n summary: { type: 'boolean' },\n expanded: {\n type: 'boolean',\n defaultValue: true\n },\n plannedStart: {\n type: 'date',\n defaultValue: null,\n nullable: true\n },\n plannedEnd: {\n type: 'date',\n defaultValue: null,\n nullable: true,\n validation: {\n dateCompare: dateCompareValidator,\n message: 'Planned end date should be after or equal to the planned start date'\n }\n }\n },\n duration: function () {\n var end = this.end, start = this.start;\n return end - start;\n },\n plannedDuration: function () {\n var end = this.plannedEnd, start = this.plannedStart;\n if (end && start) {\n return end - start;\n }\n return 0;\n },\n isMilestone: function () {\n return this.duration() === 0;\n },\n _offset: function (value) {\n var field = [\n 'start',\n 'end'\n ], newValue;\n for (var i = 0; i < field.length; i++) {\n newValue = new Date(this.get(field[i]).getTime() + value);\n this.set(field[i], newValue);\n }\n },\n _offsetPlanned: function (value) {\n var field = [\n 'plannedStart',\n 'plannedEnd'\n ], newValue;\n for (var i = 0; i < field.length; i++) {\n newValue = new Date(this.get(field[i]).getTime() + value);\n this.set(field[i], newValue);\n }\n }\n });\n GanttTask.define = function (base, options) {\n if (options === undefined) {\n options = base;\n base = GanttTask;\n }\n var parentId = options.parentId || PARENTIDFIELD;\n options.parentIdField = parentId;\n var model = TreeListModel.define(base, options);\n if (parentId) {\n model.parentIdField = parentId;\n }\n return model;\n };\n var GanttDataSource = TreeListDataSource.extend({\n init: function (options) {\n TreeListDataSource.fn.init.call(this, extend(true, {}, {\n schema: {\n modelBase: GanttTask,\n model: GanttTask\n },\n sort: {\n field: 'orderId',\n dir: 'asc'\n }\n }, options));\n },\n add: function (task) {\n if (!task) {\n return;\n }\n task = this._toGanttTask(task);\n return this.insert(this.taskSiblings(task).length, task);\n },\n insert: function (index, task) {\n if (!task) {\n return;\n }\n task = this._toGanttTask(task);\n task.set('orderId', index);\n task = DataSource.fn.insert.call(this, index, task);\n this._reorderSiblings(task, this.taskSiblings(task).length - 1);\n this._resolveSummaryFields(this.taskParent(task));\n return task;\n },\n remove: function (task) {\n var parentId = task.get('parentId'), children = this.taskAllChildren(task);\n this._removeItems(children);\n task = TreeListDataSource.fn.remove.call(this, task);\n this._childRemoved(parentId, task.get('orderId'));\n return task;\n },\n taskAllChildren: function (task) {\n var data = [], that = this;\n var callback = function (task) {\n var tasks = that.taskChildren(task);\n data.push.apply(data, tasks);\n map(tasks, callback);\n };\n if (!!task) {\n callback(task);\n } else {\n data = this.view();\n }\n return data;\n },\n taskChildren: function (task, fromView) {\n var filter = {\n field: 'parentId',\n operator: 'eq',\n value: null\n };\n var order = this._sort && this._sort.length ? this._sort : {\n field: 'orderId',\n dir: 'asc'\n };\n var taskId, data;\n if (fromView) {\n data = this.view();\n } else {\n data = this.data();\n }\n if (!!task) {\n taskId = task.get('id');\n if (taskId === undefined || taskId === null || taskId === '') {\n return [];\n }\n filter.value = taskId;\n }\n data = new Query(data).filter(filter).sort(order).toArray();\n return data;\n },\n taskLevel: function (task) {\n var level = 0, parent = this.taskParent(task);\n while (parent !== null) {\n level += 1;\n parent = this.taskParent(parent);\n }\n return level;\n },\n taskParent: function (task) {\n if (!task || task.get('parentId') === null) {\n return null;\n }\n return this.get(task.parentId);\n },\n taskSiblings: function (task) {\n if (!task) {\n return null;\n }\n var parent = this.taskParent(task);\n return this.taskChildren(parent);\n },\n taskTree: function (task) {\n var data = [], current, tasks = this.taskChildren(task, true);\n for (var i = 0, l = tasks.length; i < l; i++) {\n current = tasks[i];\n data.push(current);\n if (current.get('expanded')) {\n var children = this.taskTree(current);\n data.push.apply(data, children);\n }\n }\n return data;\n },\n update: function (task, taskInfo) {\n var that = this, oldValue;\n var offsetChildren = function (parentTask, offset) {\n var children = that.taskAllChildren(parentTask);\n for (var i = 0, l = children.length; i < l; i++) {\n children[i]._offset(offset);\n }\n };\n var offsetChildrenPlanned = function (parentTask, offset) {\n var children = that.taskAllChildren(parentTask);\n for (var i = 0, l = children.length; i < l; i++) {\n children[i]._offsetPlanned(offset);\n }\n };\n var modelChangeHandler = function (e) {\n var field = e.field, model = e.sender;\n switch (field) {\n case 'start':\n that._resolveSummaryStart(that.taskParent(model));\n offsetChildren(model, model.get(field).getTime() - oldValue.getTime());\n break;\n case 'end':\n that._resolveSummaryEnd(that.taskParent(model));\n break;\n case 'plannedStart':\n that._resolveSummaryPlannedStart(that.taskParent(model));\n if (model.get(field) && oldValue) {\n offsetChildrenPlanned(model, model.get(field).getTime() - oldValue.getTime());\n }\n break;\n case 'plannedEnd':\n that._resolveSummaryPlannedEnd(that.taskParent(model));\n break;\n case 'percentComplete':\n that._resolveSummaryPercentComplete(that.taskParent(model));\n break;\n case 'orderId':\n that._reorderSiblings(model, oldValue);\n break;\n }\n };\n if (taskInfo.parentId !== undefined) {\n oldValue = task.get('parentId');\n if (oldValue !== taskInfo.parentId) {\n task.set('parentId', taskInfo.parentId);\n that._childRemoved(oldValue, task.get('orderId'));\n task.set('orderId', that.taskSiblings(task).length - 1);\n that._resolveSummaryFields(that.taskParent(task));\n }\n delete taskInfo.parentId;\n }\n task.bind('change', modelChangeHandler);\n task.bind('equalSet', modelChangeHandler);\n for (var field in taskInfo) {\n oldValue = task.get(field);\n if (field === 'plannedStart' || field === 'plannedEnd') {\n if (oldValue !== undefined || taskInfo[field] !== null) {\n task.set(field, taskInfo[field]);\n }\n } else {\n task.set(field, taskInfo[field]);\n }\n }\n task.unbind('change', modelChangeHandler);\n task.unbind('equalSet', modelChangeHandler);\n },\n _childRemoved: function (parentId, index) {\n var parent = parentId === null ? null : this.get(parentId), children = this.taskChildren(parent);\n for (var i = index, l = children.length; i < l; i++) {\n children[i].set('orderId', i);\n }\n this._resolveSummaryFields(parent);\n },\n _resolveSummaryFields: function (summary) {\n if (!summary) {\n return;\n }\n this._updateSummary(summary);\n if (!this.taskChildren(summary).length) {\n return;\n }\n this._resolveSummaryStart(summary);\n this._resolveSummaryEnd(summary);\n this._resolveSummaryPlannedStart(summary);\n this._resolveSummaryPlannedEnd(summary);\n this._resolveSummaryPercentComplete(summary);\n },\n _resolveSummaryStart: function (summary) {\n var that = this;\n var getSummaryStart = function (parentTask) {\n var children = that.taskChildren(parentTask);\n var min = children[0].start.getTime();\n var currentMin;\n for (var i = 1, l = children.length; i < l; i++) {\n currentMin = children[i].start.getTime();\n if (currentMin < min) {\n min = currentMin;\n }\n }\n return new Date(min);\n };\n this._updateSummaryRecursive(summary, 'start', getSummaryStart);\n },\n _resolveSummaryEnd: function (summary) {\n var that = this;\n var getSummaryEnd = function (parentTask) {\n var children = that.taskChildren(parentTask);\n var max = children[0].end.getTime();\n var currentMax;\n for (var i = 1, l = children.length; i < l; i++) {\n currentMax = children[i].end.getTime();\n if (currentMax > max) {\n max = currentMax;\n }\n }\n return new Date(max);\n };\n this._updateSummaryRecursive(summary, 'end', getSummaryEnd);\n },\n _resolveSummaryPlannedStart: function (summary) {\n var that = this;\n var getSummaryPlannedStart = function (parentTask) {\n var children = that.taskChildren(parentTask), min = null, currentMin;\n for (var i = 0, l = children.length; i < l; i++) {\n if (children[i].plannedStart) {\n currentMin = children[i].plannedStart.getTime();\n if (!min || currentMin < min) {\n min = currentMin;\n }\n }\n }\n if (!min) {\n return null;\n }\n return new Date(min);\n };\n this._updateSummaryRecursive(summary, 'plannedStart', getSummaryPlannedStart);\n },\n _resolveSummaryPlannedEnd: function (summary) {\n var that = this;\n var getSummaryPlannedEnd = function (parentTask) {\n var children = that.taskChildren(parentTask), max = null, currentMax;\n for (var i = 0, l = children.length; i < l; i++) {\n if (children[i].plannedEnd) {\n currentMax = children[i].plannedEnd.getTime();\n if (!max || currentMax > max) {\n max = currentMax;\n }\n }\n }\n if (!max) {\n return null;\n }\n return new Date(max);\n };\n this._updateSummaryRecursive(summary, 'plannedEnd', getSummaryPlannedEnd);\n },\n _resolveSummaryPercentComplete: function (summary) {\n var that = this;\n var getSummaryPercentComplete = function (parentTask) {\n var children = that.taskChildren(parentTask);\n var percentComplete = new Query(children).aggregate([{\n field: 'percentComplete',\n aggregate: 'average'\n }]);\n return percentComplete.percentComplete.average;\n };\n this._updateSummaryRecursive(summary, 'percentComplete', getSummaryPercentComplete);\n },\n _reorderSiblings: function (task, oldOrderId) {\n var orderId = task.get('orderId'), direction = orderId > oldOrderId, startIndex = direction ? oldOrderId : orderId, endIndex = direction ? orderId : oldOrderId, newIndex = direction ? startIndex : startIndex + 1, siblings = this.taskSiblings(task);\n if (!siblings.length) {\n return;\n }\n endIndex = Math.min(endIndex, siblings.length - 1);\n for (var i = startIndex; i <= endIndex; i++) {\n if (siblings[i] === task) {\n continue;\n }\n siblings[i].set('orderId', newIndex);\n newIndex += 1;\n }\n },\n _toGanttTask: function (task) {\n if (!(task instanceof GanttTask)) {\n var taskInfo = task;\n task = DataSource.fn._createNewModel.call(this);\n task.accept(taskInfo);\n }\n return task;\n },\n _updateSummary: function (task) {\n if (task !== null) {\n var childCount = this.taskChildren(task).length;\n task.set('summary', childCount > 0);\n }\n },\n _updateSummaryRecursive: function (summary, field, callback) {\n if (!summary) {\n return;\n }\n var value = callback(summary);\n summary.set(field, value);\n var parent = this.taskParent(summary);\n if (parent) {\n this._updateSummaryRecursive(parent, field, callback);\n }\n }\n });\n GanttDataSource.create = createDataSource(GanttDataSource, 'GanttDataSource');\n extend(true, kendo.data, {\n GanttDataSource: GanttDataSource,\n GanttTask: GanttTask,\n GanttDependencyDataSource: GanttDependencyDataSource,\n GanttDependency: GanttDependency\n });\n }(window.kendo.jQuery));\n return window.kendo;\n}, typeof define == 'function' && define.amd ? define : function (a1, a2, a3) {\n (a3 || a2)();\n}));"]}