{"version":3,"file":"kendo.gantt.list.min.js","names":["factory","define","amd","$","extend","map","isFunction","ui","TreeList","outerHeight","activeElement","keys","mobileOS","DATATYPE","BINDING","FORMAT","STRING","NS","defaultDateFormat","titleFromField","listStyles","GanttList","window","kendo","jQuery","_outerHeight","_activeElement","support","attr","getCulture","calendar","patterns","d","title","start","end","percentComplete","parentId","id","orderId","gridHeader","gridContentWrap","editCell","iconCollapse","iconExpand","init","element","options","this","columns","length","push","fn","call","_unbindDataSource","_setWidth","name","autoBind","sortable","selectable","navigatable","editable","move","mode","resizable","renderAllRows","destroy","closeCell","isCancel","tr","model","that","cell","editor","_isIncellEditable","dataItem","_cancelEditor","removeClass","parent","editRow","lockedContent","_relatedRow","_render","trigger","item","data","ns","_adjustRowHeight","css","insertAfter","nodeData","referenceNode","taskInfo","task","updateInfo","insertBefore","_adjustHeight","height","contentWrap","find","header","scrollbar","_isHeightSet","_hasLockedColumns","table","offsetWidth","clientWidth","row1","row2","offsetHeight1","offsetHeight","offsetHeight2","style","el","initialHeight","newHeight","_attachCellEditingEventHandlers","update","_startEditHandler","e","td","currentTarget","column","_columnFromElement","_editCell","_modelFromElement","content","on","_focusInEditableHandler","bind","_focusoutCellHandler","_keydownHandler","_keyupHandler","touch","kendoTouch","filter","touchstart","_mouseDownHandler","doubletap","event","target","classList","contains","_openEditorHandler","_blurActiveElement","nodeName","toLowerCase","_closeCellTimeouted","closest","_columns","_hasExpandable","forEach","expandable","_eachColumn","_columnEditor","field","required","_extractFormat","format","container","validation","fields","dateCompare","message","hide","appendTo","prependTo","kendoDateTimePicker","idx","children","index","resourcesField","isSortable","hasNestedColumns","indexOf","template","value","get","formatedValue","i","join","editedCell","modelCopy","dataSource","_createNewModel","toJSON","_restorePageSizeAfterAddChild","_edit","editedColumn","editedColumnIndex","add","lockedTable","first","_createIncellEditor","change","values","preventDefault","_current","clearTimeout","_closeCellTimeout","setTimeout","keyCode","ENTER","ESC","row","getByUid","hasClass","isLockedCell","multiple","has","tbody","is","_renderTree","taskTree","addClass","rowHeight","_rowHeight","tasks","append","remove","_setData","listWidth","plugin"],"sources":["kendo.gantt.list.js"],"mappings":"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","sourcesContent":["(function (factory) {\n typeof define === 'function' && define.amd ? define(['kendo.treelist', 'kendo.treeview.draganddrop'], factory) :\n factory();\n})((function () {\n var __meta__ = {\n id: \"gantt.list\",\n name: \"Gantt List\",\n category: \"web\",\n description: \"The Gantt List\",\n depends: [ \"treelist\", \"treeview.draganddrop\" ],\n hidden: true\n };\n\n (function($) {\n var extend = $.extend,\n map = $.map,\n isFunction = kendo.isFunction,\n\n ui = kendo.ui,\n TreeList = ui.TreeList,\n outerHeight = kendo._outerHeight,\n activeElement = kendo._activeElement,\n keys = kendo.keys,\n mobileOS = kendo.support.mobileOS,\n\n DATATYPE = kendo.attr(\"type\"),\n BINDING = kendo.attr(\"bind\"),\n FORMAT = kendo.attr(\"format\"),\n\n STRING = \"string\",\n NS = \".kendoGanttList\",\n DOUBLE_CLICK = \"dblclick\",\n FOCUSIN = \"focusin\",\n FOCUSOUT = \"focusout\",\n KEYDOWN = \"keydown\",\n KEYUP = \"keyup\",\n MOUSE_DOWN = \"mousedown\",\n BEFORE_EDIT = \"beforeEdit\",\n EDIT = \"edit\",\n SAVE = \"save\",\n CANCEL = \"cancel\",\n RENDER = \"render\",\n DOT = \".\",\n\n defaultDateFormat = \"{0:\" + kendo.getCulture().calendar.patterns.d + \"}\",\n\n titleFromField = {\n \"title\": \"Title\",\n \"start\": \"Start Time\",\n \"end\": \"End Time\",\n \"percentComplete\": \"% Done\",\n \"parentId\": \"Predecessor ID\",\n \"id\": \"ID\",\n \"orderId\": \"Order ID\"\n },\n\n SIZE_CALCULATION_TEMPLATE = \"
\",\n\n listStyles = {\n gridHeader: \"k-grid-header\",\n gridContentWrap: \"k-grid-content\",\n editCell: \"k-edit-cell\",\n iconCollapse: \"k-i-collapse\",\n iconExpand: \"k-i-expand\"\n };\n\n var GanttList = ui.GanttList = TreeList.extend({\n init: function(element, options) {\n if (this.options.columns.length === 0) {\n this.options.columns.push(\"title\");\n }\n\n TreeList.fn.init.call(this, element, options);\n\n this._unbindDataSource();\n this._setWidth();\n },\n\n options: {\n name: \"GanttList\",\n autoBind: false,\n sortable: true,\n selectable: true,\n navigatable: false,\n editable: {\n move: true,\n mode: \"incell\"\n },\n resizable: false,\n renderAllRows: false\n },\n\n destroy: function() {\n TreeList.fn.destroy.call(this);\n kendo.destroy(this.element);\n },\n\n closeCell: function(isCancel) {\n var that = this;\n var cell = (that.editor || {}).element;\n var tr;\n var model;\n\n if (!cell || !cell[0] || !that._isIncellEditable()) {\n return;\n }\n\n model = that.dataItem(cell);\n that._cancelEditor();\n cell.removeClass(listStyles.editCell);\n tr = cell.parent().removeClass(listStyles.editRow);\n\n if (that.lockedContent) {\n that._relatedRow(tr).removeClass(listStyles.editRow);\n }\n\n if (isCancel) {\n that._render();\n }\n\n that.trigger(\"itemChange\", { item: tr, data: model, ns: ui });\n\n if (that.lockedContent) {\n that._adjustRowHeight(tr.css(\"height\", \"\")[0], that._relatedRow(tr).css(\"height\", \"\")[0]);\n }\n },\n\n insertAfter: function(nodeData, referenceNode) {\n if (!nodeData || !referenceNode) {\n return;\n }\n\n var orderId = referenceNode.orderId;\n var taskInfo = {\n parentId: referenceNode.parentId\n };\n\n if (referenceNode.parentId === nodeData.parentId && referenceNode.orderId > nodeData.orderId) {\n taskInfo.orderId = orderId;\n } else {\n taskInfo.orderId = orderId + 1;\n }\n\n this.trigger(\"reorder\", {\n task: nodeData,\n updateInfo: taskInfo\n });\n },\n\n insertBefore: function(nodeData, referenceNode) {\n if (!nodeData || !referenceNode) {\n return;\n }\n\n var orderId = referenceNode.orderId;\n var taskInfo = {\n parentId: referenceNode.parentId\n };\n\n if (referenceNode.parentId === nodeData.parentId &&\n referenceNode.orderId > nodeData.orderId) {\n taskInfo.orderId = orderId - 1;\n } else {\n taskInfo.orderId = orderId;\n }\n\n this.trigger(\"reorder\", {\n task: nodeData,\n updateInfo: taskInfo\n });\n },\n\n _adjustHeight: function() {\n var element = this.element;\n var contentWrap = element.find(DOT + listStyles.gridContentWrap);\n var header = element.find(DOT + listStyles.gridHeader);\n var height;\n var scrollbar = kendo.support.scrollbar();\n\n if (this._isHeightSet(element)) {\n height = element.height() - outerHeight(header);\n\n contentWrap.height(height);\n\n if (this._hasLockedColumns) {\n scrollbar = this.table[0].offsetWidth > this.table.parent()[0].clientWidth ? scrollbar : 0;\n this.lockedContent.height(height - scrollbar);\n }\n }\n },\n\n _adjustRowHeight: function(row1, row2) {\n var height;\n var offsetHeight1 = row1.offsetHeight;\n var offsetHeight2 = row2.offsetHeight;\n\n if (offsetHeight1 > offsetHeight2) {\n height = offsetHeight1 + \"px\";\n } else if (offsetHeight1 < offsetHeight2) {\n height = offsetHeight2 + \"px\";\n }\n\n if (height) {\n row1.style.height = row2.style.height = height;\n }\n },\n\n // identical code found in treelist, grid & scheduler :(\n _isHeightSet: function(el) {\n var initialHeight, newHeight;\n if (el[0].style.height) {\n return true;\n } else {\n initialHeight = el.height();\n }\n\n el.height(\"auto\");\n newHeight = el.height();\n el.height(\"\");\n\n return (initialHeight != newHeight);\n },\n\n _attachCellEditingEventHandlers: function() {\n var that = this,\n editable = that.options.editable;\n\n if (that._isIncellEditable() && editable.update !== false) {\n that._startEditHandler = function(e) {\n var td = e.currentTarget ? $(e.currentTarget) : e;\n var column = that._columnFromElement(td);\n\n if (that.editable) {\n return;\n }\n\n if (column && column.editable()) {\n that._editCell(td, column, that._modelFromElement(td));\n }\n };\n\n that.content\n .on(FOCUSIN + NS, that._focusInEditableHandler.bind(that))\n .on(FOCUSOUT + NS, that._focusoutCellHandler.bind(that))\n .on(KEYDOWN + NS, \"tr:not(.k-grouping-row) > td\", that._keydownHandler.bind(that))\n .on(KEYUP + NS, \"tr:not(.k-grouping-row) > td\", that._keyupHandler.bind(that));\n\n if (!mobileOS) {\n that.content\n .on(MOUSE_DOWN + NS, \"tr:not(.k-grouping-row) > td\", that._mouseDownHandler.bind(that))\n .on(DOUBLE_CLICK + NS, \"tr:not(.k-grouping-row) > td\", that._openEditorHandler.bind(that));\n } else {\n that.touch = that.content\n .kendoTouch({\n filter: \"td\",\n touchstart: function(e) {\n that._mouseDownHandler(e.touch);\n },\n doubletap: function(e) {\n if (e.event.target.classList.contains(\"k-icon\")) {\n return;\n }\n that._openEditorHandler(e.touch);\n }\n }).data(\"kendoTouch\");\n }\n }\n },\n\n _blurActiveElement: function() {\n var activeElement = kendo._activeElement();\n\n if (activeElement && activeElement.nodeName.toLowerCase() !== \"body\") {\n $(activeElement).trigger(\"blur\");\n }\n },\n\n _closeCellTimeouted: function() {\n var that = this,\n target = activeElement(),\n editor = that.editor || {},\n cell = editor.element;\n\n if (cell && cell[0] && target && !$.contains(cell[0], target) && cell[0] !== target && !$(target).closest(\".k-animation-container\").length) {\n if (editor.end()) {\n that.closeCell();\n }\n }\n },\n\n _columns: function() {\n var that = this,\n columns = this.options.columns;\n\n that._hasExpandable = false;\n\n columns.forEach(function(item) {\n if (item.expandable) {\n that._hasExpandable = true;\n }\n });\n\n that.columns = that.options.columns = map(columns, that._eachColumn.bind(that));\n\n TreeList.fn._columns.call(that);\n },\n\n _columnEditor: function(column) {\n var attr = {\n \"name\": column.field,\n \"required\": true\n };\n\n attr[BINDING] = \"value:\" + column.field;\n attr[DATATYPE] = \"date\";\n attr[FORMAT] = kendo._extractFormat(column.format);\n\n return function(container, options) {\n var model = options.model,\n field = model.fields[column.field] || model[column.field],\n validation = field.validation;\n\n if (validation && validation.dateCompare && isFunction(validation.dateCompare) && validation.message) {\n $('')\n .hide()\n .appendTo(container);\n\n attr[kendo.attr(\"dateCompare-msg\")] = validation.message;\n }\n\n $('')\n .attr(attr)\n .prependTo(container)\n .kendoDateTimePicker({ format: options.format });\n };\n },\n\n _columnFromElement: function(element) {\n var td = element.closest(\"td\"),\n tr = td.parent(),\n idx = tr.children().index(td);\n\n return this.columns[idx];\n },\n\n _eachColumn: function(column) {\n var that = this,\n resourcesField = that.options.resourcesField,\n isSortable = this.options.sortable;\n\n var model = function() {\n this.field = \"\";\n this.title = \"\";\n this.editable = function() { return false; };\n this.sortable = false;\n };\n\n var formatResources = function(task) {\n var value = task.get(resourcesField) || [],\n formatedValue = [];\n\n for (var i = 0; i < value.length; i++) {\n formatedValue.push(kendo.format(\"{0} [{1}]\", value[i].get(\"name\"), value[i].get(\"formatedValue\")));\n }\n\n return formatedValue.join(\", \");\n };\n\n if (column.columns) {\n that.hasNestedColumns = true;\n column.columns = map(column.columns, this._eachColumn.bind(this));\n }\n\n if (typeof column === STRING) {\n column = {\n field: column,\n title: titleFromField[column]\n };\n }\n\n if (column.editable === true) {\n column.editable = function() {\n return true;\n };\n } else {\n column.editable = function() {\n return false;\n };\n }\n\n if (column.field === \"start\" || column.field === \"end\") {\n column.format = kendo.getCulture().calendar.patterns[column.format] || column.format || defaultDateFormat;\n\n if (!column.editor) {\n if (column.format === defaultDateFormat || column.format.toLowerCase().indexOf(\"h\") > -1) {\n column.editor = that._columnEditor(column);\n }\n }\n }\n if (column.field === resourcesField) {\n column.sortable = false;\n column.template = column.template || formatResources;\n }\n if (!that._hasExpandable && column.field === \"title\") {\n column.expandable = true;\n }\n\n if (isSortable && !column.sortable) {\n column.sortable = false;\n }\n\n return extend(new model(), column);\n },\n\n _editCell: function(cell, column, model) {\n var that = this,\n resourcesField = that.options.resourcesField,\n modelCopy = that.dataSource._createNewModel(model.toJSON()),\n editedCell;\n\n if (column.field === resourcesField) {\n column.editor(cell, modelCopy);\n return;\n } else {\n if (that.trigger(BEFORE_EDIT, { model: model, container: cell })) {\n that.dataSource._restorePageSizeAfterAddChild();\n return;\n }\n\n that.closeCell();\n\n model._edit = true;\n\n that._cancelEditor();\n\n that._render({\n editedColumn: column,\n editedColumnIndex: cell.index()\n });\n\n editedCell = that.table.add(that.lockedTable).find(DOT + listStyles.editCell).first();\n\n that.editor = that._createIncellEditor(editedCell, {\n columns: [column],\n model: model,\n change: function(e) {\n if (that.trigger(SAVE, { values: e.values, container: cell, model: model } )) {\n e.preventDefault();\n }\n }\n });\n\n // refresh the current element as the DOM element reference can be changed after render()\n that._current = editedCell;\n\n that.trigger(EDIT, { container: cell, model: model });\n }\n },\n\n _focusInEditableHandler: function(e) {\n var that = this,\n target = e.target;\n\n if (!$.contains(target, activeElement())) {\n clearTimeout(that._closeCellTimeout);\n that._closeCellTimeout = null;\n }\n },\n\n _focusoutCellHandler: function(e) {\n var that = this;\n\n that._closeCellTimeout = setTimeout(function() {\n that._closeCellTimeouted(e);\n }, 1);\n },\n\n _keydownHandler: function(e) {\n if (e.keyCode === keys.ENTER) {\n e.preventDefault();\n }\n },\n\n _keyupHandler: function(e) {\n var that = this,\n key = e.keyCode,\n cell, model;\n\n switch (key) {\n case keys.ENTER:\n that._blurActiveElement();\n that._closeCellTimeouted(e);\n break;\n case keys.ESC:\n if (that.editor) {\n cell = $(e.target);\n model = that._modelFromElement(cell);\n\n that.trigger(CANCEL, { model: model, cell: cell });\n }\n break;\n }\n },\n\n _modelFromElement: function(element) {\n var row = element.closest(\"tr\"),\n model = this.dataSource.getByUid(row.attr(kendo.attr(\"uid\")));\n\n return model;\n },\n\n _mouseDownHandler: function(e) {\n var currentTarget = $(e.currentTarget);\n\n if (!currentTarget.hasClass(listStyles.editCell)) {\n this._blurActiveElement();\n }\n },\n\n _openEditorHandler: function(e) {\n var that = this,\n td = $(e.currentTarget),\n isLockedCell = that.lockedTable && td.closest(\"table\")[0] === that.lockedTable[0],\n selectable = that.selectable && that.selectable.options.multiple;\n\n if (td.hasClass(listStyles.editCell) ||\n td.has(\"a.k-grid-delete\").length ||\n td.has(\"button.k-grid-delete\").length ||\n (td.closest(\"tbody\")[0] !== that.tbody[0] && !isLockedCell) ||\n $(e.target).is(\":input\") ||\n $(e.target).hasClass(listStyles.iconExpand) ||\n $(e.target).hasClass(listStyles.iconCollapse)) {\n\n return;\n }\n\n if (that.editor) {\n if (that.editor.end()) {\n if (selectable) {\n $(activeElement()).trigger(\"blur\");\n }\n that.closeCell();\n that.editCell(td);\n }\n } else {\n that.editCell(td);\n }\n },\n\n _renderTree: function(taskTree) {\n TreeList.fn._render.call(this);\n\n if (this.hasNestedColumns) {\n this.element.addClass(\"k-gantt-treelist-nested-columns\");\n }\n\n if (taskTree && taskTree.length && !taskTree.editedColumn) {\n if (this.options.rowHeight) {\n this._rowHeight(taskTree);\n }\n\n this.trigger(RENDER);\n }\n\n this._adjustHeight();\n },\n\n _rowHeight: function(tasks) {\n var content = this.content,\n options = this.options,\n rowHeight = typeof options.rowHeight === STRING ? options.rowHeight : options.rowHeight + \"px\",\n table = $(kendo.format(SIZE_CALCULATION_TEMPLATE, rowHeight)),\n height;\n\n content.append(table);\n height = outerHeight(table.find(\"tr\"));\n table.remove();\n\n this.element.find('[role=\"treegrid\"]').css(\"height\", (tasks.length * height) + \"px\");\n },\n\n _setData: function(tasks) {\n this.dataSource.data(tasks);\n },\n\n _setWidth: function() {\n this.element.find(\".k-grid-header table\").css(\"minWidth\", this.options.listWidth);\n this.content.find(\"table\").css(\"minWidth\", this.options.listWidth);\n }\n });\n\n ui.plugin(GanttList);\n\n })(window.kendo.jQuery);\n\n}));\n"]}