{"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","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","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 };\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 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) {\n var data = this.view();\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;\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);\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 offsetChildrenPlanned(model, model.get(field).getTime() - oldValue.getTime());\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 for (var field in taskInfo) {\n oldValue = task.get(field);\n task.set(field, taskInfo[field]);\n }\n task.unbind('change', 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}));"]}