@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
3 lines (2 loc) • 13.1 kB
JavaScript
!function(e){"function"==typeof define&&define.amd?define(["kendo.data.min","kendo.popup.min","kendo.window.min","kendo.gantt.data.min","kendo.grid.min","kendo.datetimepicker.min","kendo.numerictextbox.min","kendo.textbox.min","kendo.form.min","kendo.tabstrip.min"],e):e()}((function(){var e,t,i,n,a,o,d,r,s,l,c,u,p,m;e=window.kendo.jQuery,i=window.kendo,n=i.ui,a=i.Observable,o=n.Widget,d=e.extend,r="23em",s="k-gantt-delete",l="k-gantt-cancel",c="k-gantt-update",u={form:"k-popup-edit-form",editForm:"k-gantt-edit-form",formContainer:"k-edit-form-container",resourcesFormContainer:"k-resources-form-container",message:"k-popup-message",buttonsContainer:"k-edit-buttons k-actions",button:"k-button",buttonDefaults:"k-button-md k-rounded-md k-button-solid k-button-solid-base",editField:"k-edit-field",editLabel:"k-edit-label",resourcesField:"k-gantt-resources"},p=a.extend({init:function(e,t){a.fn.init.call(this),this.element=e,this.options=d(!0,{},this.options,t)},destroy:function(){this.close(),this.unbind()},close:function(){var e=this,t=function(){e.editable&&(e.container.data("kendoWindow").destroy(),e.editable=null,e.container=null),e.popup&&(e.popup.destroy(),e.popup=null)};e.editable&&e.container.is(":visible")?(e.trigger("close",{window:e.container}),e.container.data("kendoWindow").bind("deactivate",t).close()):t()},editTask:function(e,t){this.task=e,this.plannedEditors=t,this.editable=this._createPopupEditor()},fields:function(){var t,n=this.options,a=this.task,o={};return n.editable.template?e.map(a.fields,(function(e,t){return{field:t}})):(o.general=this._fieldsGeneral(),n.resources&&(o.resources=[{field:"resources"}]),n.dependencies&&(o.dependencies=this._fieldsDependencies(a)),t=d(!0,{},a.fields),Object.keys(i.data.GanttTask.fields).map((function(e){delete t[e]})),Object.keys(t).length>0&&(o.other=this._fieldsOther(t)),o)},showDialog:function(t){var n,a=u,o=this.element,d=e(i.format('<div class="'+a.formContainer+'">')).appendTo(o),r=this.options.messages;d.append(e("<p>"+t.text+"</p>")),n=e('<div class="'+a.buttonsContainer+'">'),d.append(n),n.append(e("<button class='"+s+"'>"+r.destroy+"</button>").kendoButton({name:"delete",themeColor:"primary",icon:"delete",click:function(e){e.preventDefault(),c.close(),t.callback()}})),n.append(e("<button class='"+l+"'>"+r.cancel+"</button>").kendoButton({name:"cancel",icon:"cancel",click:function(e){e.preventDefault(),c.close(),t.callback(!0)}})),this.popup&&this.popup.destroy();var c=this.popup=d.kendoWindow({modal:!0,autoFocus:!1,resizable:!1,draggable:!1,title:t.title,visible:!1,deactivate:function(){this.destroy(),o.trigger("focus")}}).getKendoWindow();c.center().open(),c.element.find(".k-button-solid-primary").trigger("focus")},_buildButtons:function(t){var i=this.options.messages,n=e('<div class="'+u.buttonsContainer+'">');n.appendTo(t),n.append(e("<button class='"+c+"'>"+i.save+"</button>").kendoButton({name:"update",themeColor:"primary",icon:"save",click:this._onSave.bind(this)})),n.append(e("<button class='"+l+"'>"+i.cancel+"</button>").kendoButton({name:"cancel",icon:"cancel",click:this._onCancel.bind(this)})),n.append(e("<span class='k-spacer'>")),!1!==this.options.editable.destroy&&n.append(e("<button class='"+s+"'>"+i.destroy+"</button>").kendoButton({name:"delete",themeColor:"primary",icon:"delete",fillMode:"flat",click:this._onDelete.bind(this)}))},_buildEditTemplate:function(t,n){var a=this.options.editable.template,o=d({},i.Template,this.options.templateSettings),r="";a?("string"==typeof a&&(a=i.unescape(a)),r+=i.template(a,o)(t)):(this.renderForm=!0,r+='<div class="k-gantt-edit-tabstrip" style="min-height:28em"></div>'),e(r).appendTo(n)},_createPopupEditor:function(){var t,n=this,a=this.options.messages,o=u,r=this.task,s=e(i.format('<div {0}="{1}" class="{2} {3}">',i.attr("uid"),r.uid,o.form,o.editForm));return s.appendTo(this.element),this._buildEditTemplate(r,s),this._buildButtons(s),this.container=s.kendoWindow(d({width:554,modal:!0,resizable:!1,draggable:!0,title:a.editor.editorTitle,visible:!1,actions:["Minimize","Maximize","Close"],close:function(e){e.userTriggered&&n.trigger("cancel",{container:s,model:r})&&e.preventDefault()}},{})),t=this.renderForm?this._initForm():s.kendoEditable({model:r,clearContainer:!1,validateOnBlur:!0,target:n.options.target}).data("kendoEditable"),i.cycleForm(s),this.trigger("edit",{container:s,model:r})?n.trigger("cancel",{container:s,model:r}):s.data("kendoWindow").center().open(),t},_fieldsDependencies:function(e){return{nameDdlDs:this.options.target.dataSource.data().filter((function(t){return t.id!==e.id})).map((function(e){return{text:e.title,value:e.id}})),typeDs:[{value:0,text:"Finish-Finish"},{value:1,text:"Finish-Start"},{value:2,text:"Start-Finish"},{value:3,text:"Start-Start"}]}},_fieldsGeneral:function(){var e,t,n,a=this,o=this.options,r=o.target.dataSource,s=o.messages.editor,l=this.task,c=l.fields,u=this.plannedEditors?s.actualStart:s.start,p=this.plannedEditors?s.actualEnd:s.end,m=[{field:"title",title:s.title,colSpan:4}];return this.plannedEditors&&(m.push({field:"plannedStart",title:s.plannedStart,colSpan:2,editor:"DateTimePicker",validation:c.plannedStart.validation,editorOptions:{componentType:"modern"}}),m.push({field:"plannedEnd",title:s.plannedEnd,colSpan:2,editor:"DateTimePicker",validation:c.plannedEnd.validation,editorOptions:{componentType:"modern"}})),e=r.data(),(t=r.taskAllChildren(l)).push(l),n=e.filter((function(e){return!t.some((function(t){return t.id===e.id}))})),m.push({field:"start",title:u,colSpan:2,editor:"DateTimePicker",validation:c.start.validation,editorOptions:{componentType:"modern"}}),m.push({field:"end",title:p,colSpan:2,editor:"DateTimePicker",validation:c.start.validation,editorOptions:{componentType:"modern"}}),m.push({field:"percentComplete",title:s.percentComplete,format:"p0",colSpan:1,hint:s.percentCompleteHint}),m.push({field:"parentId",title:s.parent,colSpan:4,editor:"DropDownList",editorOptions:{optionLabel:s.parentOptionLabel,filter:"contains",dataSource:n,enable:n.length>0,dataValueField:"id",dataTextField:"title",valuePrimitive:!0,template:function(e){var t=e.title,n=e.start,a=e.end;return"<span>"+t+" "+i.toString(n,"d")+"-"+i.toString(a,"d")+"</span>"}}}),m=m.map((function(e){return e=d(!0,{label:e.title},e),!l.editable||l.editable(e.field)?e:d(!0,e,{editor:a._readonlyEditor.bind(a)})}))},_fieldsOther:function(e){var t=this,i=this.task;return e=Object.keys(e).map((function(n){var a=e[n];return a=d(!0,{field:n,label:a.title},a),!i.editable||i.editable(a.field)?a:d(!0,a,{editor:t._readonlyEditor.bind(t)})}))},_gridOptions:function(t,i,n,a){var o,d=this.options.messages;return this.dependencyData||(this.dependencyData={}),{dataSource:{data:this.dependencyData[i]=this.options.target.dependencies.view().filter((function(e){return e[n]===a})),schema:{model:{fields:(o={id:{from:"id"}},o[i]={from:i,validation:{required:{message:d.editor.name+" is required"}}},o.type={from:"type",validation:{required:!0},defaultValue:1},o)}}},columns:[{selectable:!0,width:50},{field:i,title:d.editor.name,values:t.nameDdlDs},{field:"type",title:d.editor.dependencyType,values:t.typeDs,width:"9em"}],toolbar:[{name:"create",text:d.editor.addNew},{name:"remove",icon:"minus",text:d.editor.remove,click:function(t){var i=t.target.closest(".k-grid").getKendoGrid(),n=i.dataSource,a=i.select(),o=[];a&&a.length>0&&(a.each((function(t,n){o.push(i.dataItem(e(n)))})),o.map((function(e){n.remove(e)})))}}],editable:!0,sortable:!0,navigatable:!0,height:r,edit:function(){var t=e("[name=predecessorId], [name=successorId]");t.length&&t.data("kendoDropDownList").setOptions({filter:"contains"})}}},_initForm:function(){var t=this,i=t.task,n=t.container,a=t.options.resources,o=i.get(a.field),d=t.fields(),r=t._tabStripSource(d,o);return n.find(".k-gantt-edit-tabstrip").kendoTabStrip({dataTextField:"name",dataContentField:"content",dataSource:r,value:t.options.messages.editor.general,select:function(t){var i=t.sender,n=e(i.contentElement(i.select().index())),a=n.find(".k-grid").data("kendoGrid"),o=n.find(".k-form").data("kendoForm");(a&&a.editable&&a.editable.validatable&&!a.editable.validatable.validate()||o&&!o.validator.validate())&&t.preventDefault()}}),t._initGeneral(d.general,i),o&&(t.resourceEditor=a.editor(n.find(".k-gantt-resources"),i)),d.dependencies&&(n.find(".k-gantt-predecessors").kendoGrid(t._gridOptions(d.dependencies,"predecessorId","successorId",i.id)),n.find(".k-gantt-successors").kendoGrid(t._gridOptions(d.dependencies,"successorId","predecessorId",i.id))),d.other&&t._initOther(d.other,i),t.form.editable},_initGeneral:function(e,t){this.form=this.container.find(".k-gantt-form-default").kendoForm({layout:"grid",grid:{cols:4,gutter:{rows:0,cols:8}},items:e,formData:t,buttonsTemplate:function(){return""},validatable:{validateOnBlur:!0}}).data("kendoForm")},_initOther:function(e,t){this.container.find(".k-gantt-form-other").kendoForm({items:e,formData:t,buttonsTemplate:function(){return""},validatable:{validateOnBlur:!0}})},_readonlyEditor:function(e,t){var n=t.field,a="",o=this.options.target.dataSource;null!==t.model.get(n)&&((a=t.model.get(n))instanceof Date?a=i.toString(a,"g"):"percentComplete"===n?a=i.toString(a,t.format):"parentId"===n&&(a=o.get(a).title)),e.append("<span>"+a+"</span>")},_onCancel:function(){this.trigger("cancel",{container:this.container,model:this.task})},_onDelete:function(){this.trigger("remove",{container:this.container,model:this.task})},_onSave:function(){var t,i,n,a,o=this.task,d=[],r={},s=this.container,l=s.find(".k-gantt-predecessors").getKendoGrid(),c=s.find(".k-gantt-successors").getKendoGrid(),u={},p=[],m=[];if(l){if(n=this.dependencyData.successorId.concat(this.dependencyData.predecessorId),a=l.dataSource.view().toJSON().concat(c.dataSource.view().toJSON()),l&&l.editable&&l.editable.validatable&&!l.editable.validatable.validate()||c&&c.editable&&c.editable.validatable&&!c.editable.validatable.validate())return;a.map((function(e){i=n.find((function(t){return t.id===e.id})),i&&(i.dirty&&m.push(e),a=a.filter((function(t){return t.id!==e.id})),n=n.filter((function(t){return t.id!==e.id})))})),a.map((function(e){e.successorId?(e.predecessorId||(e.predecessorId=o.get("id")),p.push(e)):e.predecessorId&&(e.successorId||(e.successorId=o.get("id")),p.push(e))})),(p.length>0||n.length>0||m.length>0)&&(u.updateDependencies={destroyed:n,created:p,updated:m})}if(Object.values(this.fields()).map((function(e){Array.isArray(e)&&d.push.apply(d,e)})),!this.resourceEditor||this.resourceEditor.updateModel()){for(var f=0,h=d.length;f<h;f++)r[t=d[f].field]=o.get(t);this.trigger("save",e.extend({},u,{container:s,model:o,updateInfo:r}))}},_tabStripSource:function(e,t){var i=this.options.messages.editor,n=e.dependencies,a=[{name:i.general,content:"<form class='k-gantt-form-default'></form>"}];return t&&a.push({name:i.resources,content:"<div class='k-gantt-resources'></div>"}),n&&(a.push({name:i.predecessors,content:"<div class='k-gantt-predecessors'></div>"}),a.push({name:i.successors,content:"<div class='k-gantt-successors'></div>"})),e.other&&a.push({name:i.other,content:"<form class='k-gantt-form-other'></form>"}),a}}),m=o.extend({init:function(e,t){o.fn.init.call(this,e,t),this.wrapper=this.element,this.model=this.options.model,this.resourcesField=this.options.resourcesField,this._resourceGrid()},destroy:function(){this.grid=null,o.fn.destroy.call(this),this.element=this.wrapper=null},updateModel:function(){var e,i,n=[],a=this.grid,o=a.dataSource.data(),d=a.editable;if(d&&d.validatable&&!d.validatable.validate())return!1;for(var r=0,s=o.length;r<s;r++)i=(e=o[r]).get("value"),e.id!==t&&null!==i&&i>0&&n.push(o[r]);return this.model[this.resourcesField]=n,!0},_resourceGrid:function(){var e=this,n=this.options.messages,a=e.options,o=this.wrapper,d=a.resources;e.grid=new i.ui.Grid(o,{columns:[{selectable:!0,width:50},{field:"id",title:n.resourcesHeader,values:d},{field:"value",title:n.unitsHeader,template:function(e){var t=e.format||"p0",n=null!==e.value?e.value:"";return t?i.toString(n,t):n},width:120}],height:r,sortable:!0,editable:!0,filterable:!0,navigatable:!0,toolbar:[{name:"create",text:n.addNew},{name:"remove",icon:"minus",text:n.remove,click:function(){var t=e.grid,i=t.dataSource,n=t.selectedKeyNames();n&&n.length>0&&n.map((function(e){i.remove(i.get(e))}))}}],dataSource:{data:this.model.resources,schema:{model:{id:"id",fields:{id:{from:"id",type:"number",defaultValue:t,validation:{required:{message:n.resourcesHeader+" is required"}}},value:{from:"value",type:"number",defaultValue:1,validation:this.options.unitsValidation},format:{from:"format",type:"string"}}}}},edit:function(e){var t=e.container.find("select").data("kendoDropDownList"),i=e.model.id,n=a.model.resources.map((function(e){return e.id})).filter((function(e){return e!==i})).map((function(e){return{field:"value",operator:"neq",value:e}}));t&&(t.dataSource.filter({logic:"and",filters:n}),t.setOptions({filter:"contains"}))}})}}),i.gantt={PopupEditor:p,ResourceEditor:m}}));
//# sourceMappingURL=kendo.gantt.editors.min.js.map