source: Dev/trunk/src/client/dojox/gantt/contextMenuTab.js @ 536

Last change on this file since 536 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 11.8 KB
Line 
1define([
2        "./GanttTaskControl",
3        "dijit/Menu",
4        "dijit/Dialog",
5        "dijit/form/NumberSpinner",
6        "dijit/form/Button",
7        "dijit/form/CheckBox",
8        "dijit/form/DateTextBox",
9        "dijit/form/TimeTextBox",
10        "dijit/form/TextBox",
11        "dijit/form/Form",
12        "dijit/registry",
13        "dojo/_base/declare",
14        "dojo/_base/array",
15        "dojo/_base/lang",
16        "dojo/_base/html",
17    "dojo/date/locale",
18        "dojo/request",
19        "dojo/dom",
20        "dojo/dom-class",
21        "dojo/domReady!"
22], function(GanttTaskControl, Menu, Dialog, NumberSpinner, Button, CheckBox, DateTextBox, TimeTextBox, TextBox, Form,
23                registry, declare, arrayUtil, lang, html, locale, request,
24                dom, domClass){
25        return declare("dojox.gantt.contextMenuTab", [], {
26                constructor: function(id, description, type, showOInfo, tabMenu, withDefaultValue){
27                        this.id = id;
28                        this.arrItems = [];
29                        this.TabItemContainer = null;
30                        this.Description = description;
31                        this.tabMenu = tabMenu;
32                        this.type = type;
33                        this.object = null;
34                        this.showObjectInfo = showOInfo;
35                        this.withDefaultValue = withDefaultValue;
36                },
37                preValueValidation: function(items){
38                        for(var i = 0; i < items.length; i++){
39                                var item = items[i];
40                                //TODO add more validation for Id, Name, .....
41                                if(item.required && !item.control.textbox.value){
42                                        return false;
43                                }
44                        }
45                        return true;
46                },
47                encodeDate: function(date){
48                        return date.getFullYear() + "." + (date.getMonth() + 1) + "." + date.getDate();
49                },
50                decodeDate: function(dateStr){
51                        var arr = dateStr.split(".");
52                        return (arr.length < 3) ? "" : (new Date(arr[0], parseInt(arr[1]) - 1, arr[2]));
53                },
54                renameTaskAction: function(){
55                        var name = this.arrItems[0].control.textbox.value;
56                        if(lang.trim(name).length <= 0){
57                                return;
58                        }
59                        if(!this.preValueValidation(this.arrItems)){
60                                return;
61                        }
62                        this.object.setName(name);
63                        this.hide();
64                },
65                deleteAction: function(){
66                        if(!this.preValueValidation(this.arrItems)){
67                                return;
68                        }
69                        this.object.project.deleteTask(this.object.taskItem.id);
70                        this.hide();
71                        this.tabMenu.ganttChart.resource && this.tabMenu.ganttChart.resource.reConstruct();
72                },
73                durationUpdateAction: function(){
74                        var d = this.arrItems[0].control.textbox.value;
75                        if(!this.preValueValidation(this.arrItems)){
76                                return;
77                        }
78                        if(this.object.setDuration(d)){
79                                this.hide();
80                        }else{
81                                alert("Duration out of Range");
82                                return;
83                        }
84                        this.tabMenu.ganttChart.resource && this.tabMenu.ganttChart.resource.refresh();
85                },
86                cpUpdateAction: function(){
87                        var p = this.arrItems[0].control.textbox.value;
88                        if(!this.preValueValidation(this.arrItems)){
89                                return;
90                        }
91                        if(this.object.setPercentCompleted(p)){
92                                this.hide();
93                        }else{
94                                alert("Complete Percentage out of Range");
95                        }
96                },
97                ownerUpdateAction: function(){
98                        var to = this.arrItems[0].control.textbox.value;
99                        if(!this.preValueValidation(this.arrItems)){
100                                return;
101                        }
102                        if(this.object.setTaskOwner(to)){
103                                this.hide();
104                        }else{
105                                alert("Task owner not Valid");
106                                return;
107                        }
108                        this.tabMenu.ganttChart.resource && this.tabMenu.ganttChart.resource.reConstruct();
109                },
110                ptUpdateAction: function(){
111                        var p = this.arrItems[0].control.textbox.value;
112                        if(!this.preValueValidation(this.arrItems)){
113                                return;
114                        }
115                        if(this.object.setPreviousTask(p)){
116                                this.hide();
117                        }else{
118                                alert("Please verify the Previous Task (" + p + ")  and adjust its Time Range");
119                        }
120                },
121                renameProjectAction: function(){
122                        var name = this.arrItems[0].control.textbox.value;
123                        if(lang.trim(name).length <= 0){
124                                return;
125                        }
126                        if(!this.preValueValidation(this.arrItems)){
127                                return;
128                        }
129                        this.object.setName(name);
130                        this.hide();
131                },
132                deleteProjectAction: function(){
133                        if(!this.preValueValidation(this.arrItems)){
134                                return;
135                        }
136                        this.object.ganttChart.deleteProject(this.object.project.id);
137                        this.hide();
138                        this.tabMenu.ganttChart.resource && this.tabMenu.ganttChart.resource.reConstruct();
139                },
140                cpProjectAction: function(){
141                        var p = this.arrItems[0].control.textbox.value;
142                        if(!this.preValueValidation(this.arrItems)){
143                                return;
144                        }
145                        if(this.object.setPercentCompleted(p)){
146                                this.hide();
147                        }else{
148                                alert("Percentage not Acceptable");
149                        }
150                },
151                addTaskAction: function(){
152                        if(!this.preValueValidation(this.arrItems)){
153                                return;
154                        }
155                        var id = this.arrItems[0].control.textbox.value,
156                                name = this.arrItems[1].control.textbox.value,
157                                startTime = this.decodeDate(this.arrItems[2].control.textbox.value),
158                                duration = this.arrItems[3].control.textbox.value,
159                                pc = this.arrItems[4].control.textbox.value,
160                                owner = this.arrItems[5].control.textbox.value,
161                                parentTaskId = this.arrItems[6].control.textbox.value,
162                                predTaskId = this.arrItems[7].control.textbox.value;
163                        if(lang.trim(id).length <= 0){
164                                return;
165                        }
166                        if(this.object.insertTask(id, name, startTime, duration, pc, predTaskId, owner, parentTaskId)){
167                                this.hide();
168                        }else{
169                                alert("Please adjust your Customization");
170                                return;
171                        }
172                        this.tabMenu.ganttChart.resource && this.tabMenu.ganttChart.resource.reConstruct();
173                },
174                addSuccessorTaskAction: function(){
175                        if(!this.preValueValidation(this.arrItems)){
176                                return;
177                        }
178                        var pr = this.object.project,
179                                id = this.arrItems[0].control.textbox.value,
180                                name = this.arrItems[1].control.textbox.value,
181                                startTime = this.decodeDate(this.arrItems[2].control.textbox.value),
182                                duration = this.arrItems[3].control.textbox.value,
183                                pc = this.arrItems[4].control.textbox.value,
184                                owner = this.arrItems[5].control.textbox.value;
185                        if(lang.trim(id).length <= 0){
186                                return;
187                        }
188                        var parentTaskId = !this.object.parentTask ? "" : this.object.parentTask.taskItem.id;
189                        var predTaskId = this.object.taskItem.id;
190                        if(pr.insertTask(id, name, startTime, duration, pc, predTaskId, owner, parentTaskId)){
191                                this.hide();
192                        }else{
193                                alert("Please adjust your Customization");
194                                return;
195                        }
196                        this.tabMenu.ganttChart.resource && this.tabMenu.ganttChart.resource.reConstruct();
197                },
198                addChildTaskAction: function(){
199                        if(!this.preValueValidation(this.arrItems)){
200                                return;
201                        }
202                        var pr = this.object.project,
203                                id = this.arrItems[0].control.textbox.value,
204                                name = this.arrItems[1].control.textbox.value,
205                                startTime = this.decodeDate(this.arrItems[2].control.textbox.value),
206                                duration = this.arrItems[3].control.textbox.value,
207                                pc = this.arrItems[4].control.textbox.value,
208                                owner = this.arrItems[5].control.textbox.value,
209                                parentTaskId = this.object.taskItem.id,
210                                predTaskId = "";
211                        if(lang.trim(id).length <= 0){
212                                return;
213                        }
214                        if(pr.insertTask(id, name, startTime, duration, pc, predTaskId, owner, parentTaskId)){
215                                this.hide();
216                        }else{
217                                alert("Please adjust your Customization");
218                                return;
219                        }
220                        this.tabMenu.ganttChart.resource && this.tabMenu.ganttChart.resource.reConstruct();
221                },
222                addProjectAction: function(){
223                        if(!this.preValueValidation(this.arrItems)){
224                                return;
225                        }
226                        var id = this.arrItems[0].control.textbox.value,
227                        namePr = this.arrItems[1].control.textbox.value,
228                        startDatePr = this.decodeDate(this.arrItems[2].control.textbox.value);
229                        if(lang.trim(id).length <= 0 || lang.trim(namePr).length <= 0){
230                                return;
231                        }
232                        if(this.tabMenu.ganttChart.insertProject(id, namePr, startDatePr)){
233                                this.hide();
234                        }else{
235                                alert("Please adjust your Customization");
236                                return;
237                        }
238                        this.tabMenu.ganttChart.resource && this.tabMenu.ganttChart.resource.reConstruct();
239                },
240       
241                addAction: function(handler){
242                        this.actionFunc = this[handler];
243                },
244                addItem: function(id, name, key, required){
245                        var inputControl;
246                        if(key == "startTime" || key == "startDate"){
247                                inputControl = new DateTextBox({type:"text", constraints:{datePattern:"yyyy.M.d", strict:true}});
248                        }else if(key == "percentage"){
249                                inputControl = new NumberSpinner({ constraints:{ max:100, min:0 }});
250                        }else if(key == "duration"){
251                                inputControl = new NumberSpinner({ constraints:{ min:0 }});
252                        }else{
253                                inputControl = new TextBox();
254                        }
255                        this.arrItems.push({
256                                id: id,
257                                name: name,
258                                control: inputControl,
259                                tab: this,
260                                key: key,
261                                required: required
262                        });
263                },
264                show: function(){
265                        this.tabMenu.tabPanelDlg = this.tabMenu.tabPanelDlg || registry.byId(this.tabMenu.tabPanelDlgId) ||
266                                new Dialog({
267                                        title: "Settings"
268                                });
269                        try{
270                                this.tabMenu.tabPanelDlg.show();
271                        }catch(e){
272                                console.log("dialog show exception: " + e.message);
273                                return;
274                        }
275                        this.tabMenu.tabPanelDlg.titleNode.innerHTML = this.Description;
276                        var content = this.tabMenu.paneContentArea.firstChild.rows[1].cells[0].firstChild;
277                        var cell, cellValue, row = null;
278               
279                        if(this.showObjectInfo){
280                                if(this.object){
281                                        if(this.object.constructor == GanttTaskControl){
282                                                this.insertData(content, "Id", this.object.taskItem.id);
283                                                this.insertData(content, "Name", this.object.taskItem.name);
284                                                this.insertData(content, "Start Time", this.encodeDate(this.object.taskItem.startTime));
285                                                this.insertData(content, "Duration (hours)", this.object.taskItem.duration + " hours");
286                                                this.insertData(content, "Percent Complete (%)", this.object.taskItem.percentage + "%");
287                                                this.insertData(content, "Task Assignee", this.object.taskItem.taskOwner);
288                                                this.insertData(content, "Previous Task Id", this.object.taskItem.previousTaskId);
289                                        }else{
290                                                this.insertData(content, "Id", this.object.project.id);
291                                                this.insertData(content, "Name", this.object.project.name);
292                                                this.insertData(content, "Start date", this.encodeDate(this.object.project.startDate));
293                                        }
294                                }
295                        }
296                        //separator
297                        row = content.insertRow(content.rows.length);
298                        cell = row.insertCell(row.cells.length);
299                        cell.colSpan = 2;
300                        cell.innerHTML = "<hr/>";
301                        //input section header
302                        row = content.insertRow(content.rows.length);
303                        cell = row.insertCell(row.cells.length);
304                        cell.colSpan = 2;
305                        domClass.add(cell, "ganttMenuDialogInputCellHeader");
306                        cell.innerHTML = "Customization: " + this.Description;
307                        //input details
308                        arrayUtil.forEach(this.arrItems, function(item){
309                                row = content.insertRow(content.rows.length);
310                                cell = row.insertCell(row.cells.length);
311                                domClass.add(cell, "ganttMenuDialogInputCell");
312                                cellValue = row.insertCell(row.cells.length);
313                                domClass.add(cellValue, "ganttMenuDialogInputCellValue");
314                                cell.innerHTML = item.name;
315                                cellValue.appendChild(item.control.domNode);
316                                //initialize default value
317                                if(this.withDefaultValue && this.object){
318                                        if(this.object.constructor == GanttTaskControl){
319                                                if(item.key == "startTime"){
320                                                        item.control.textbox.value = this.encodeDate(this.object.taskItem.startTime);
321                                                }else{
322                                                        item.control.textbox.value = item.key ? this.object.taskItem[item.key] : "";
323                                                }
324                                        }else{
325                                                if(item.key == "startDate"){
326                                                        item.control.textbox.value = this.encodeDate(this.object.project.startDate);
327                                                }else{
328                                                        item.control.textbox.value = item.key ? (this.object.project[item.key] || this.object[item.key] || "") : "";
329                                                }
330                                        }
331                                }else{
332                                        //HTML5 placeholder property
333                                        item.control.textbox.placeholder = item.required ? "---required---" : "---optional---";
334                                }
335                        }, this);
336                        this.tabMenu.ok.onClick = lang.hitch(this, this.actionFunc);
337                        this.tabMenu.cancel.onClick = lang.hitch(this, this.hide);
338                },
339                hide: function(){
340                        try{
341                                this.tabMenu.tabPanelDlg.hide();
342                        }catch(e){
343                                console.log("dialog show exception: " + e.message);
344                                this.tabMenu.tabPanelDlg.destroy();
345                        }
346                        var cell = this.tabMenu.paneContentArea.firstChild.rows[1].cells[0];
347                        cell.firstChild.parentNode.removeChild(cell.firstChild);
348                        cell.innerHTML = "<table></table>";
349                        domClass.add(cell.firstChild, "ganttDialogContentCell");
350                },
351                insertData: function(content, name, value){
352                        var cellValue,
353                                row = content.insertRow(content.rows.length),
354                                cell = row.insertCell(row.cells.length);
355                        domClass.add(cell, "ganttMenuDialogDescCell");
356                        cell.innerHTML = name;
357                        cellValue = row.insertCell(row.cells.length);
358                        domClass.add(cellValue, "ganttMenuDialogDescCellValue");
359                        cellValue.innerHTML = value;
360                }
361        });
362});
Note: See TracBrowser for help on using the repository browser.