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