974 lines
33 KiB
JavaScript
974 lines
33 KiB
JavaScript
|
//>>built
|
||
|
// wrapped by build app
|
||
|
define("dojox/gantt/GanttProjectItem", ["dijit","dojo","dojox","dojo/require!dojox/gantt/GanttTaskItem,dojo/date/locale,dijit/focus"], function(dijit,dojo,dojox){
|
||
|
dojo.provide("dojox.gantt.GanttProjectItem");
|
||
|
|
||
|
dojo.require("dojox.gantt.GanttTaskItem");
|
||
|
dojo.require("dojo.date.locale");
|
||
|
dojo.require("dijit.focus"); // dijit.focus()
|
||
|
|
||
|
dojo.declare("dojox.gantt.GanttProjectControl", null, {
|
||
|
constructor: function(ganttChart, projectItem){
|
||
|
this.project = projectItem;
|
||
|
this.ganttChart = ganttChart;
|
||
|
this.descrProject = null;
|
||
|
this.projectItem = null;
|
||
|
this.projectNameItem = null;
|
||
|
this.posY = 0;
|
||
|
this.posX = 0;
|
||
|
this.nextProject = null;
|
||
|
this.previousProject = null;
|
||
|
this.arrTasks = [];
|
||
|
this.percentage = 0;
|
||
|
this.duration = 0;
|
||
|
},
|
||
|
checkWidthProjectNameItem: function(){
|
||
|
if(this.projectNameItem.offsetWidth + this.projectNameItem.offsetLeft > this.ganttChart.maxWidthTaskNames){
|
||
|
var width = this.projectNameItem.offsetWidth + this.projectNameItem.offsetLeft - this.ganttChart.maxWidthTaskNames;
|
||
|
var countChar = Math.round(width / (this.projectNameItem.offsetWidth / this.projectNameItem.firstChild.length));
|
||
|
var pName = this.project.name.substring(0, this.projectNameItem.firstChild.length - countChar - 3);
|
||
|
pName += "...";
|
||
|
this.projectNameItem.innerHTML = pName;
|
||
|
}
|
||
|
},
|
||
|
refreshProjectItem: function(projectItem){
|
||
|
this.percentage = this.getPercentCompleted();
|
||
|
dojo.style(projectItem, {
|
||
|
"left": this.posX + "px",
|
||
|
"width": this.duration * this.ganttChart.pixelsPerWorkHour + "px"
|
||
|
});
|
||
|
var tblProjectItem = projectItem.firstChild;
|
||
|
var width = this.duration * this.ganttChart.pixelsPerWorkHour;
|
||
|
tblProjectItem.width = ((width == 0) ? 1 : width) + "px";
|
||
|
tblProjectItem.style.width = ((width == 0) ? 1 : width) + "px";
|
||
|
var rowprojectItem = tblProjectItem.rows[0];
|
||
|
if(this.percentage != -1){
|
||
|
if(this.percentage != 0){
|
||
|
var cellprojectItem = rowprojectItem.firstChild;
|
||
|
cellprojectItem.width = this.percentage + "%";
|
||
|
var imageProgress = cellprojectItem.firstChild;
|
||
|
dojo.style(imageProgress, {
|
||
|
width: (!this.duration ? 1 : (this.percentage * this.duration * this.ganttChart.pixelsPerWorkHour / 100)) + "px",
|
||
|
height: this.ganttChart.heightTaskItem + "px"
|
||
|
})
|
||
|
}
|
||
|
if(this.percentage != 100){
|
||
|
var cellprojectItem = rowprojectItem.lastChild;
|
||
|
cellprojectItem.width = (100 - this.percentage) + "%";
|
||
|
var imageProgress = cellprojectItem.firstChild;
|
||
|
dojo.style(imageProgress, {
|
||
|
width: (!this.duration ? 1 : ((100 - this.percentage) * this.duration * this.ganttChart.pixelsPerWorkHour / 100)) + "px",
|
||
|
height: this.ganttChart.heightTaskItem + "px"
|
||
|
})
|
||
|
}
|
||
|
}else{
|
||
|
var cellprojectItem = rowprojectItem.firstChild;
|
||
|
cellprojectItem.width = "1px";
|
||
|
var imageProgress = cellprojectItem.firstChild;
|
||
|
dojo.style(imageProgress, {
|
||
|
width: "1px",
|
||
|
height: this.ganttChart.heightTaskItem + "px"
|
||
|
})
|
||
|
}
|
||
|
var divTaskInfo = projectItem.lastChild;
|
||
|
var tblTaskInfo = divTaskInfo.firstChild;
|
||
|
dojo.style(tblTaskInfo, {
|
||
|
height: this.ganttChart.heightTaskItem + "px",
|
||
|
width: (!this.duration ? 1 : (this.duration * this.ganttChart.pixelsPerWorkHour)) + "px"
|
||
|
});
|
||
|
var rowTaskInfo = tblTaskInfo.rows[0];
|
||
|
var cellTaskInfo = rowTaskInfo.firstChild;
|
||
|
cellTaskInfo.height = this.ganttChart.heightTaskItem + "px";
|
||
|
if(this.project.parentTasks.length == 0){
|
||
|
projectItem.style.display = "none";
|
||
|
}
|
||
|
return projectItem;
|
||
|
},
|
||
|
refreshDescrProject: function(divDesc){
|
||
|
var posX = (this.posX + this.duration * this.ganttChart.pixelsPerWorkHour + 10);
|
||
|
dojo.style(divDesc, {
|
||
|
"left": posX + "px"
|
||
|
});
|
||
|
if(this.project.parentTasks.length == 0){
|
||
|
this.descrProject.style.visibility = 'hidden';
|
||
|
}
|
||
|
return divDesc;
|
||
|
},
|
||
|
postLoadData: function(){
|
||
|
//TODO e.g. project relative info...
|
||
|
},
|
||
|
refresh: function(){
|
||
|
var containerTasks = this.ganttChart.contentData.firstChild;
|
||
|
this.posX = (this.project.startDate - this.ganttChart.startDate) / (60 * 60 * 1000) * this.ganttChart.pixelsPerHour;
|
||
|
this.refreshProjectItem(this.projectItem[0]);
|
||
|
this.refreshDescrProject(this.projectItem[0].nextSibling);
|
||
|
return this;
|
||
|
},
|
||
|
create: function(){
|
||
|
var containerTasks = this.ganttChart.contentData.firstChild;
|
||
|
this.posX = (this.project.startDate - this.ganttChart.startDate) / (60 * 60 * 1000) * this.ganttChart.pixelsPerHour;
|
||
|
if(this.previousProject){
|
||
|
if(this.previousProject.arrTasks.length > 0){
|
||
|
var lastChildTask = this.ganttChart.getLastChildTask(this.previousProject.arrTasks[this.previousProject.arrTasks.length - 1]);
|
||
|
this.posY = parseInt(lastChildTask.cTaskItem[0].style.top) + this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
|
||
|
}else{
|
||
|
this.posY = parseInt(this.previousProject.projectItem[0].style.top) + this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
|
||
|
}
|
||
|
}else{
|
||
|
this.posY = 6;
|
||
|
}
|
||
|
var containerNames = this.ganttChart.panelNames.firstChild;
|
||
|
this.projectNameItem = this.createProjectNameItem();
|
||
|
containerNames.appendChild(this.projectNameItem);
|
||
|
this.checkWidthProjectNameItem();
|
||
|
this.projectItem = [this.createProjectItem(), []];
|
||
|
containerTasks.appendChild(this.projectItem[0]);
|
||
|
containerTasks.appendChild(this.createDescrProject());
|
||
|
this.adjustPanelTime();
|
||
|
},
|
||
|
getTaskById: function(id){
|
||
|
for(var i = 0; i < this.arrTasks.length; i++){
|
||
|
var aTask = this.arrTasks[i];
|
||
|
var task = this.searchTaskInTree(aTask, id);
|
||
|
if(task){
|
||
|
return task;
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
},
|
||
|
searchTaskInTree: function(task, id){
|
||
|
if(task.taskItem.id == id){
|
||
|
return task;
|
||
|
}else{
|
||
|
for(var i = 0; i < task.childTask.length; i++){
|
||
|
var cTask = task.childTask[i];
|
||
|
if(cTask.taskItem.id == id){
|
||
|
return cTask;
|
||
|
}else{
|
||
|
if(cTask.childTask.length > 0){
|
||
|
var cTask = this.searchTaskInTree(cTask, id);
|
||
|
if(cTask){
|
||
|
return cTask;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
},
|
||
|
shiftProjectItem: function(){
|
||
|
var posItemL = null;
|
||
|
var posItemR = null;
|
||
|
var posProjectItemL = parseInt(this.projectItem[0].style.left);
|
||
|
var posProjectItemR = parseInt(this.projectItem[0].firstChild.style.width) + parseInt(this.projectItem[0].style.left);
|
||
|
var widthProjectItem = parseInt(this.projectItem[0].firstChild.style.width);
|
||
|
for(var i = 0; i < this.arrTasks.length; i++){
|
||
|
var aTask = this.arrTasks[i];
|
||
|
var tmpPosItemL = parseInt(aTask.cTaskItem[0].style.left);
|
||
|
var tmpPosItemR = parseInt(aTask.cTaskItem[0].style.left) + parseInt(aTask.cTaskItem[0].firstChild.firstChild.width);
|
||
|
if(!posItemL){
|
||
|
posItemL = tmpPosItemL;
|
||
|
}
|
||
|
if(!posItemR){
|
||
|
posItemR = tmpPosItemR;
|
||
|
}
|
||
|
if(posItemL > tmpPosItemL){
|
||
|
posItemL = tmpPosItemL;
|
||
|
}
|
||
|
if(posItemR < tmpPosItemR){
|
||
|
posItemR = tmpPosItemR;
|
||
|
}
|
||
|
}
|
||
|
if(posItemL != posProjectItemL){
|
||
|
this.project.startDate = new Date(this.ganttChart.startDate);
|
||
|
this.project.startDate.setHours(this.project.startDate.getHours() + (posItemL / this.ganttChart.pixelsPerHour));
|
||
|
}
|
||
|
this.projectItem[0].style.left = posItemL + "px";
|
||
|
this.resizeProjectItem(posItemR - posItemL);
|
||
|
this.duration = Math.round(parseInt(this.projectItem[0].firstChild.width) / (this.ganttChart.pixelsPerWorkHour));
|
||
|
this.shiftDescrProject();
|
||
|
this.adjustPanelTime();
|
||
|
},
|
||
|
adjustPanelTime: function(){
|
||
|
var projectItem = this.projectItem[0];
|
||
|
var width = parseInt(projectItem.style.left) + parseInt(projectItem.firstChild.style.width) + this.ganttChart.panelTimeExpandDelta;
|
||
|
width += this.descrProject.offsetWidth;
|
||
|
this.ganttChart.adjustPanelTime(width);
|
||
|
},
|
||
|
resizeProjectItem: function(width){
|
||
|
var percentage = this.percentage,
|
||
|
pItem = this.projectItem[0];
|
||
|
if(percentage > 0 && percentage < 100){
|
||
|
pItem.firstChild.style.width = width + "px";
|
||
|
pItem.firstChild.width = width + "px";
|
||
|
pItem.style.width = width + "px";
|
||
|
var firstRow = pItem.firstChild.rows[0];
|
||
|
firstRow.cells[0].firstChild.style.width = Math.round(width * percentage / 100) + "px";
|
||
|
firstRow.cells[0].firstChild.style.height = this.ganttChart.heightTaskItem + "px";
|
||
|
firstRow.cells[1].firstChild.style.width = Math.round(width * (100 - percentage) / 100) + "px";
|
||
|
firstRow.cells[1].firstChild.style.height = this.ganttChart.heightTaskItem + "px";
|
||
|
pItem.lastChild.firstChild.width = width + "px";
|
||
|
}else if(percentage == 0 || percentage == 100){
|
||
|
pItem.firstChild.style.width = width + "px";
|
||
|
pItem.firstChild.width = width + "px";
|
||
|
pItem.style.width = width + "px";
|
||
|
var firstRow = pItem.firstChild.rows[0];
|
||
|
firstRow.cells[0].firstChild.style.width = width + "px";
|
||
|
firstRow.cells[0].firstChild.style.height = this.ganttChart.heightTaskItem + "px";
|
||
|
pItem.lastChild.firstChild.width = width + "px";
|
||
|
}
|
||
|
},
|
||
|
shiftDescrProject: function(){
|
||
|
var posX = (parseInt(this.projectItem[0].style.left) + this.duration * this.ganttChart.pixelsPerWorkHour + 10);
|
||
|
this.descrProject.style.left = posX + "px";
|
||
|
this.descrProject.innerHTML = this.getDescStr();
|
||
|
},
|
||
|
showDescrProject: function(){
|
||
|
var posX = (parseInt(this.projectItem[0].style.left) + this.duration * this.ganttChart.pixelsPerWorkHour + 10);
|
||
|
this.descrProject.style.left = posX + "px";
|
||
|
this.descrProject.style.visibility = 'visible';
|
||
|
this.descrProject.innerHTML = this.getDescStr();
|
||
|
},
|
||
|
hideDescrProject: function(){
|
||
|
this.descrProject.style.visibility = 'hidden';
|
||
|
},
|
||
|
getDescStr: function(){
|
||
|
return this.duration/this.ganttChart.hsPerDay + " days, " + this.duration + " hours";
|
||
|
},
|
||
|
createDescrProject: function(){
|
||
|
var posX = (this.posX + this.duration * this.ganttChart.pixelsPerWorkHour + 10);
|
||
|
var divDesc = dojo.create("div", {
|
||
|
innerHTML: this.getDescStr(),
|
||
|
className: "ganttDescProject"
|
||
|
});
|
||
|
dojo.style(divDesc, {
|
||
|
left: posX + "px",
|
||
|
top: this.posY + "px"
|
||
|
});
|
||
|
this.descrProject = divDesc;
|
||
|
if(this.project.parentTasks.length == 0){
|
||
|
this.descrProject.style.visibility = 'hidden';
|
||
|
}
|
||
|
return divDesc;
|
||
|
},
|
||
|
createProjectItem: function(){
|
||
|
this.percentage = this.getPercentCompleted();
|
||
|
this.duration = this.getDuration();
|
||
|
var projectItem = dojo.create("div", {
|
||
|
id: this.project.id,
|
||
|
className: "ganttProjectItem"
|
||
|
});
|
||
|
dojo.style(projectItem, {
|
||
|
left: this.posX + "px",
|
||
|
top: this.posY + "px",
|
||
|
width: this.duration * this.ganttChart.pixelsPerWorkHour + "px"
|
||
|
});
|
||
|
var tblProjectItem = dojo.create("table", {
|
||
|
cellPadding: "0",
|
||
|
cellSpacing: "0",
|
||
|
className: "ganttTblProjectItem"
|
||
|
}, projectItem);
|
||
|
var width = this.duration * this.ganttChart.pixelsPerWorkHour;
|
||
|
tblProjectItem.width = ((width == 0) ? 1 : width) + "px";
|
||
|
tblProjectItem.style.width = ((width == 0) ? 1 : width) + "px";
|
||
|
|
||
|
var rowprojectItem = tblProjectItem.insertRow(tblProjectItem.rows.length);
|
||
|
if(this.percentage != -1){
|
||
|
if(this.percentage != 0){
|
||
|
var cellprojectItem = dojo.create("td", {
|
||
|
width: this.percentage + "%"
|
||
|
}, rowprojectItem);
|
||
|
cellprojectItem.style.lineHeight = "1px";
|
||
|
var imageProgress = dojo.create("div", {
|
||
|
className: "ganttImageProgressFilled"
|
||
|
}, cellprojectItem);
|
||
|
dojo.style(imageProgress, {
|
||
|
width: (this.percentage * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
|
||
|
height: this.ganttChart.heightTaskItem + "px"
|
||
|
});
|
||
|
}
|
||
|
if(this.percentage != 100){
|
||
|
var cellprojectItem = dojo.create("td", {
|
||
|
width: (100 - this.percentage) + "%"
|
||
|
}, rowprojectItem);
|
||
|
cellprojectItem.style.lineHeight = "1px";
|
||
|
var imageProgress = dojo.create("div", {
|
||
|
className: "ganttImageProgressBg"
|
||
|
}, cellprojectItem);
|
||
|
dojo.style(imageProgress, {
|
||
|
width: ((100 - this.percentage) * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
|
||
|
height: this.ganttChart.heightTaskItem + "px"
|
||
|
});
|
||
|
}
|
||
|
}else{
|
||
|
var cellprojectItem = dojo.create("td", {
|
||
|
width: "1px"
|
||
|
}, rowprojectItem);
|
||
|
cellprojectItem.style.lineHeight = "1px";
|
||
|
var imageProgress = dojo.create("div", {
|
||
|
className: "ganttImageProgressBg"
|
||
|
}, cellprojectItem);
|
||
|
dojo.style(imageProgress, {
|
||
|
width: "1px",
|
||
|
height: this.ganttChart.heightTaskItem + "px"
|
||
|
});
|
||
|
}
|
||
|
var divTaskInfo = dojo.create("div", {className: "ganttDivTaskInfo"});
|
||
|
var tblTaskInfo = dojo.create("table", {
|
||
|
cellPadding: "0",
|
||
|
cellSpacing: "0",
|
||
|
height: this.ganttChart.heightTaskItem + "px",
|
||
|
width: ((this.duration * this.ganttChart.pixelsPerWorkHour == 0) ? 1 : this.duration * this.ganttChart.pixelsPerWorkHour) + "px"
|
||
|
}, divTaskInfo);
|
||
|
var rowTaskInfo = tblTaskInfo.insertRow(0);
|
||
|
var cellTaskInfo = dojo.create("td", {
|
||
|
align: "center",
|
||
|
vAlign: "top",
|
||
|
height: this.ganttChart.heightTaskItem + "px",
|
||
|
className: "ganttMoveInfo"
|
||
|
}, rowTaskInfo);
|
||
|
projectItem.appendChild(divTaskInfo);
|
||
|
if(this.project.parentTasks.length == 0){
|
||
|
projectItem.style.display = "none";
|
||
|
}
|
||
|
return projectItem;
|
||
|
},
|
||
|
createProjectNameItem: function(){
|
||
|
var divName = dojo.create("div", {
|
||
|
className: "ganttProjectNameItem",
|
||
|
innerHTML: this.project.name,
|
||
|
title: this.project.name
|
||
|
});
|
||
|
dojo.style(divName, {
|
||
|
left: "5px",
|
||
|
top: this.posY + "px"
|
||
|
});
|
||
|
dojo.attr(divName, "tabIndex", 0);
|
||
|
if(this.ganttChart.isShowConMenu){
|
||
|
this.ganttChart._events.push(
|
||
|
dojo.connect(divName, "onmouseover", this, function(event){
|
||
|
dojo.addClass(divName, "ganttProjectNameItemHover");
|
||
|
clearTimeout(this.ganttChart.menuTimer);
|
||
|
this.ganttChart.tabMenu.clear();
|
||
|
this.ganttChart.tabMenu.show(event.target, this);
|
||
|
})
|
||
|
);
|
||
|
this.ganttChart._events.push(
|
||
|
dojo.connect(divName, "onkeydown", this, function(event){
|
||
|
if(event.keyCode == dojo.keys.ENTER){
|
||
|
this.ganttChart.tabMenu.clear();
|
||
|
this.ganttChart.tabMenu.show(event.target, this);
|
||
|
}
|
||
|
if(this.ganttChart.tabMenu.isShow && (event.keyCode == dojo.keys.LEFT_ARROW || event.keyCode == dojo.keys.RIGHT_ARROW)){
|
||
|
dijit.focus(this.ganttChart.tabMenu.menuPanel.firstChild.rows[0].cells[0]);
|
||
|
}
|
||
|
if(this.ganttChart.tabMenu.isShow && event.keyCode == dojo.keys.ESCAPE){
|
||
|
this.ganttChart.tabMenu.hide();
|
||
|
}
|
||
|
})
|
||
|
);
|
||
|
this.ganttChart._events.push(
|
||
|
dojo.connect(divName, "onmouseout", this, function(){
|
||
|
dojo.removeClass(divName, "ganttProjectNameItemHover");
|
||
|
clearTimeout(this.ganttChart.menuTimer);
|
||
|
this.ganttChart.menuTimer = setTimeout(dojo.hitch(this, function(){
|
||
|
this.ganttChart.tabMenu.hide();
|
||
|
}), 200);
|
||
|
})
|
||
|
);
|
||
|
this.ganttChart._events.push(
|
||
|
dojo.connect(this.ganttChart.tabMenu.menuPanel, "onmouseover", this, function(){
|
||
|
clearTimeout(this.ganttChart.menuTimer);
|
||
|
})
|
||
|
);
|
||
|
this.ganttChart._events.push(
|
||
|
dojo.connect(this.ganttChart.tabMenu.menuPanel, "onkeydown", this, function(event){
|
||
|
if(this.ganttChart.tabMenu.isShow && event.keyCode == dojo.keys.ESCAPE){
|
||
|
this.ganttChart.tabMenu.hide();
|
||
|
}
|
||
|
})
|
||
|
);
|
||
|
this.ganttChart._events.push(
|
||
|
dojo.connect(this.ganttChart.tabMenu.menuPanel, "onmouseout", this, function(){
|
||
|
clearTimeout(this.ganttChart.menuTimer);
|
||
|
this.ganttChart.menuTimer = setTimeout(dojo.hitch(this, function(){
|
||
|
this.ganttChart.tabMenu.hide();
|
||
|
}), 200);
|
||
|
})
|
||
|
);
|
||
|
}
|
||
|
return divName;
|
||
|
},
|
||
|
getPercentCompleted: function(){
|
||
|
var sum = 0, percentage = 0;
|
||
|
dojo.forEach(this.project.parentTasks, function(ppTask){
|
||
|
sum += parseInt(ppTask.percentage);
|
||
|
}, this);
|
||
|
if(this.project.parentTasks.length != 0){
|
||
|
return percentage = Math.round(sum / this.project.parentTasks.length);
|
||
|
}else{
|
||
|
return percentage = -1;
|
||
|
}
|
||
|
},
|
||
|
getDuration: function(){
|
||
|
var duration = 0, tmpDuration = 0;
|
||
|
if(this.project.parentTasks.length > 0){
|
||
|
dojo.forEach(this.project.parentTasks, function(ppTask){
|
||
|
tmpDuration = ppTask.duration * 24 / this.ganttChart.hsPerDay + (ppTask.startTime - this.ganttChart.startDate) / (60 * 60 * 1000);
|
||
|
if(tmpDuration > duration){
|
||
|
duration = tmpDuration;
|
||
|
}
|
||
|
}, this);
|
||
|
return ((duration - this.posX) / 24) * this.ganttChart.hsPerDay;
|
||
|
}else{
|
||
|
return 0;
|
||
|
}
|
||
|
},
|
||
|
deleteTask: function(id){
|
||
|
var task = this.getTaskById(id);
|
||
|
if(task){
|
||
|
this.deleteChildTask(task);
|
||
|
this.ganttChart.checkPosition();
|
||
|
}
|
||
|
},
|
||
|
setName: function(name){
|
||
|
if(name){
|
||
|
this.project.name = name;
|
||
|
this.projectNameItem.innerHTML = name;
|
||
|
this.projectNameItem.title = name;
|
||
|
this.checkWidthProjectNameItem();
|
||
|
|
||
|
this.descrProject.innerHTML = this.getDescStr();
|
||
|
this.adjustPanelTime();
|
||
|
}
|
||
|
},
|
||
|
setPercentCompleted: function(percentage){
|
||
|
percentage = parseInt(percentage);
|
||
|
if(isNaN(percentage) || percentage > 100 || percentage < 0){
|
||
|
return false;
|
||
|
}
|
||
|
var prow = this.projectItem[0].firstChild.rows[0],
|
||
|
rc0 = prow.cells[0], rc1 = prow.cells[1];
|
||
|
if((percentage > 0) && (percentage < 100) && (this.percentage > 0) && (this.percentage < 100)){
|
||
|
rc0.width = parseInt(percentage) + "%";
|
||
|
rc0.firstChild.style.width = (percentage * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px";
|
||
|
rc1.width = (100 - parseInt(percentage)) + "%";
|
||
|
rc1.firstChild.style.width = ((100 - percentage) * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px";
|
||
|
}else if(((percentage == 0) || (percentage == 100)) && (this.percentage > 0) && (this.percentage < 100)){
|
||
|
if(percentage == 0){
|
||
|
rc0.parentNode.removeChild(rc0);
|
||
|
rc1.width = 100 + "%";
|
||
|
rc1.firstChild.style.width = this.duration * this.ganttChart.pixelsPerWorkHour + "px";
|
||
|
}else if(percentage == 100){
|
||
|
rc1.parentNode.removeChild(rc1);
|
||
|
rc0.width = 100 + "%";
|
||
|
rc0.firstChild.style.width = this.duration * this.ganttChart.pixelsPerWorkHour + "px";
|
||
|
}
|
||
|
}else if(((percentage == 0) || (percentage == 100)) && ((this.percentage == 0) || (this.percentage == 100))){
|
||
|
if((percentage == 0) && (this.percentage == 100)){
|
||
|
dojo.removeClass(rc0.firstChild, "ganttImageProgressFilled");
|
||
|
dojo.addClass(rc0.firstChild, "ganttImageProgressBg");
|
||
|
}else if((percentage == 100) && (this.percentage == 0)){
|
||
|
dojo.removeClass(rc0.firstChild, "ganttImageProgressBg");
|
||
|
dojo.addClass(rc0.firstChild, "ganttImageProgressFilled");
|
||
|
}
|
||
|
}else if(((percentage > 0) || (percentage < 100)) && ((this.percentage == 0) || (this.percentage == 100))){
|
||
|
rc0.parentNode.removeChild(rc0);
|
||
|
var cellprojectItem = dojo.create("td", {
|
||
|
width: percentage + "%"
|
||
|
}, prow);
|
||
|
cellprojectItem.style.lineHeight = "1px";
|
||
|
var imageProgress = dojo.create("div", {
|
||
|
className: "ganttImageProgressFilled"
|
||
|
}, cellprojectItem);
|
||
|
dojo.style(imageProgress, {
|
||
|
width: (percentage * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
|
||
|
height: this.ganttChart.heightTaskItem + "px"
|
||
|
});
|
||
|
cellprojectItem = dojo.create("td", {
|
||
|
width: (100 - percentage) + "%"
|
||
|
}, prow);
|
||
|
cellprojectItem.style.lineHeight = "1px";
|
||
|
imageProgress = dojo.create("div", {
|
||
|
className: "ganttImageProgressBg"
|
||
|
}, cellprojectItem);
|
||
|
dojo.style(imageProgress, {
|
||
|
width: ((100 - percentage) * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
|
||
|
height: this.ganttChart.heightTaskItem + "px"
|
||
|
});
|
||
|
}else if(this.percentage == -1){
|
||
|
if(percentage == 100){
|
||
|
dojo.removeClass(rc0.firstChild, "ganttImageProgressBg");
|
||
|
dojo.addClass(rc0.firstChild, "ganttImageProgressFilled");
|
||
|
}else if(percentage < 100 && percentage > 0){
|
||
|
rc0.parentNode.removeChild(rc0);
|
||
|
var cellprojectItem = dojo.create("td", {
|
||
|
width: percentage + "%"
|
||
|
}, prow);
|
||
|
cellprojectItem.style.lineHeight = "1px";
|
||
|
imageProgress = dojo.create("div", {
|
||
|
className: "ganttImageProgressFilled"
|
||
|
}, cellprojectItem);
|
||
|
dojo.style(imageProgress, {
|
||
|
width: (percentage * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
|
||
|
height: this.ganttChart.heightTaskItem + "px"
|
||
|
});
|
||
|
cellprojectItem = dojo.create("td", {
|
||
|
width: (100 - percentage) + "%"
|
||
|
}, prow);
|
||
|
cellprojectItem.style.lineHeight = "1px";
|
||
|
imageProgress = dojo.create("div", {
|
||
|
className: "ganttImageProgressBg"
|
||
|
}, cellprojectItem);
|
||
|
dojo.style(imageProgress, {
|
||
|
width: ((100 - percentage) * this.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
|
||
|
height: this.ganttChart.heightTaskItem + "px"
|
||
|
});
|
||
|
}
|
||
|
}
|
||
|
this.percentage = percentage;
|
||
|
this.descrProject.innerHTML = this.getDescStr();
|
||
|
return true;
|
||
|
},
|
||
|
deleteChildTask: function(task){
|
||
|
if(task){
|
||
|
var tItem0 = task.cTaskItem[0], tNameItem0 = task.cTaskNameItem[0],
|
||
|
tItem1 = task.cTaskItem[1], tNameItem1 = task.cTaskNameItem[1],
|
||
|
tItem2 = task.cTaskItem[2], tNameItem2 = task.cTaskNameItem[2];
|
||
|
if(tItem0.style.display == "none"){
|
||
|
this.ganttChart.openTree(task.parentTask);
|
||
|
}
|
||
|
//delete of connecting lines
|
||
|
if(task.childPredTask.length > 0){
|
||
|
for(var i = 0; i < task.childPredTask.length; i++){
|
||
|
var cpTask = task.childPredTask[i];
|
||
|
for(var t = 0; t < cpTask.cTaskItem[1].length; t++){
|
||
|
cpTask.cTaskItem[1][t].parentNode.removeChild(cpTask.cTaskItem[1][t]);
|
||
|
}
|
||
|
cpTask.cTaskItem[1] = [];
|
||
|
cpTask.predTask = null;
|
||
|
}
|
||
|
}
|
||
|
//delete child task
|
||
|
if(task.childTask.length > 0){
|
||
|
while(task.childTask.length > 0){
|
||
|
this.deleteChildTask(task.childTask[0]);
|
||
|
}
|
||
|
}
|
||
|
//shift tasks
|
||
|
var rowHeight = this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
|
||
|
if(tItem0.style.display != "none"){
|
||
|
task.shiftCurrentTasks(task, -rowHeight);
|
||
|
}
|
||
|
//delete object task
|
||
|
this.project.deleteTask(task.taskItem.id);
|
||
|
//delete div and connecting lines from contentData
|
||
|
if(tItem0){
|
||
|
tItem0.parentNode.removeChild(tItem0);
|
||
|
}
|
||
|
task.descrTask.parentNode.removeChild(task.descrTask);
|
||
|
if(tItem1.length > 0){
|
||
|
for(var j = 0; j < tItem1.length; j++){
|
||
|
tItem1[j].parentNode.removeChild(tItem1[j]);
|
||
|
}
|
||
|
}
|
||
|
//delete div and connecting lines from panelName
|
||
|
if(tNameItem0){
|
||
|
tNameItem0.parentNode.removeChild(tNameItem0);
|
||
|
}
|
||
|
if(task.cTaskNameItem[1]){
|
||
|
for(var j = 0; j < tNameItem1.length; j++){
|
||
|
tNameItem1[j].parentNode.removeChild(tNameItem1[j]);
|
||
|
}
|
||
|
}
|
||
|
if(tNameItem2 && tNameItem2.parentNode){
|
||
|
tNameItem2.parentNode.removeChild(tNameItem2);
|
||
|
}
|
||
|
if(task.taskIdentifier){
|
||
|
task.taskIdentifier.parentNode.removeChild(task.taskIdentifier);
|
||
|
task.taskIdentifier = null;
|
||
|
}
|
||
|
//delete object task
|
||
|
if(task.parentTask){
|
||
|
if(task.previousChildTask){
|
||
|
if(task.nextChildTask){
|
||
|
task.previousChildTask.nextChildTask = task.nextChildTask;
|
||
|
}else{
|
||
|
task.previousChildTask.nextChildTask = null;
|
||
|
}
|
||
|
}
|
||
|
var parentTask = task.parentTask;
|
||
|
for(var i = 0; i < parentTask.childTask.length; i++){
|
||
|
if(parentTask.childTask[i].taskItem.id == task.taskItem.id){
|
||
|
parentTask.childTask[i] = null;
|
||
|
parentTask.childTask.splice(i, 1);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if(parentTask.childTask.length == 0){
|
||
|
if(parentTask.cTaskNameItem[2]){
|
||
|
parentTask.cTaskNameItem[2].parentNode.removeChild(parentTask.cTaskNameItem[2]);
|
||
|
parentTask.cTaskNameItem[2] = null;
|
||
|
}
|
||
|
}
|
||
|
}else{
|
||
|
if(task.previousParentTask){
|
||
|
if(task.nextParentTask){
|
||
|
task.previousParentTask.nextParentTask = task.nextParentTask;
|
||
|
}else{
|
||
|
task.previousParentTask.nextParentTask = null;
|
||
|
}
|
||
|
}
|
||
|
var project = task.project;
|
||
|
for(var i = 0; i < project.arrTasks.length; i++){
|
||
|
if(project.arrTasks[i].taskItem.id == task.taskItem.id){
|
||
|
project.arrTasks.splice(i, 1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(task.predTask){
|
||
|
var predTask = task.predTask;
|
||
|
for(var i = 0; i < predTask.childPredTask.length; i++){
|
||
|
if(predTask.childPredTask[i].taskItem.id == task.taskItem.id){
|
||
|
predTask.childPredTask[i] = null;
|
||
|
predTask.childPredTask.splice(i, 1);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(task.project.arrTasks.length != 0){
|
||
|
task.project.shiftProjectItem();
|
||
|
}else{
|
||
|
task.project.projectItem[0].style.display = "none";
|
||
|
this.hideDescrProject();
|
||
|
}
|
||
|
this.ganttChart.contentDataHeight -= this.ganttChart.heightTaskItemExtra + this.ganttChart.heightTaskItem;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
insertTask: function(id, name, startTime, duration, percentage, previousTaskId, taskOwner, parentTaskId){
|
||
|
var task = null;
|
||
|
var _task = null;
|
||
|
if(this.project.getTaskById(id)){
|
||
|
return false;
|
||
|
}
|
||
|
if((!duration) || (duration < this.ganttChart.minWorkLength)){
|
||
|
duration = this.ganttChart.minWorkLength;
|
||
|
}
|
||
|
if((!name) || (name == "")){
|
||
|
name = id;
|
||
|
}
|
||
|
if((!percentage) || (percentage == "")){
|
||
|
percentage = 0;
|
||
|
|
||
|
}else{
|
||
|
percentage = parseInt(percentage);
|
||
|
if(percentage < 0 || percentage > 100){
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
var sortRequired = false;
|
||
|
if((parentTaskId) && (parentTaskId != "")){
|
||
|
var parentTask = this.project.getTaskById(parentTaskId);
|
||
|
if(!parentTask){
|
||
|
return false;
|
||
|
}
|
||
|
startTime = startTime || parentTask.startTime;
|
||
|
if(startTime < parentTask.startTime){
|
||
|
return false;
|
||
|
}
|
||
|
task = new dojox.gantt.GanttTaskItem({
|
||
|
id: id,
|
||
|
name: name,
|
||
|
startTime: startTime,
|
||
|
duration: duration,
|
||
|
percentage: percentage,
|
||
|
previousTaskId: previousTaskId,
|
||
|
taskOwner: taskOwner
|
||
|
});
|
||
|
if(!this.ganttChart.checkPosParentTask(parentTask, task)){
|
||
|
return false;
|
||
|
}
|
||
|
task.parentTask = parentTask;
|
||
|
var _parentTask = this.getTaskById(parentTask.id);
|
||
|
var isHide = false;
|
||
|
if(_parentTask.cTaskItem[0].style.display == "none"){
|
||
|
isHide = true;
|
||
|
}else if(_parentTask.cTaskNameItem[2]){
|
||
|
if(!_parentTask.isExpanded){
|
||
|
isHide = true;
|
||
|
}
|
||
|
}
|
||
|
if(isHide){
|
||
|
if(_parentTask.childTask.length == 0){
|
||
|
this.ganttChart.openTree(_parentTask.parentTask);
|
||
|
}else{
|
||
|
this.ganttChart.openTree(_parentTask);
|
||
|
}
|
||
|
}
|
||
|
if(previousTaskId != ""){
|
||
|
var predTask = this.project.getTaskById(previousTaskId);
|
||
|
if(!predTask){
|
||
|
return false;
|
||
|
}
|
||
|
if(predTask.parentTask){
|
||
|
if(predTask.parentTask.id != task.parentTask.id){
|
||
|
return false;
|
||
|
}
|
||
|
}else{
|
||
|
return false;
|
||
|
}
|
||
|
if(!this.ganttChart.checkPosPreviousTask(predTask, task)){
|
||
|
this.ganttChart.correctPosPreviousTask(predTask, task);
|
||
|
}
|
||
|
task.previousTask = predTask;
|
||
|
}
|
||
|
var isAdd = false;
|
||
|
if(sortRequired) for(var i = 0; i < parentTask.cldTasks.length; i++){
|
||
|
if(task.startTime < parentTask.cldTasks[i].startTime){
|
||
|
parentTask.cldTasks.splice(i, 0, task);
|
||
|
if(i > 0){
|
||
|
parentTask.cldTasks[i - 1].nextChildTask = parentTask.cldTasks[i];
|
||
|
parentTask.cldTasks[i].previousChildTask = parentTask.cldTasks[i - 1];
|
||
|
}
|
||
|
if(parentTask.cldTasks[i + 1]){
|
||
|
parentTask.cldTasks[i + 1].previousChildTask = parentTask.cldTasks[i];
|
||
|
parentTask.cldTasks[i].nextChildTask = parentTask.cldTasks[i + 1];
|
||
|
}
|
||
|
isAdd = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if(!isAdd){
|
||
|
if(parentTask.cldTasks.length > 0){
|
||
|
parentTask.cldTasks[parentTask.cldTasks.length - 1].nextChildTask = task;
|
||
|
task.previousChildTask = parentTask.cldTasks[parentTask.cldTasks.length - 1];
|
||
|
}
|
||
|
parentTask.cldTasks.push(task);
|
||
|
}
|
||
|
if(parentTask.cldTasks.length == 1){
|
||
|
var treeImg = _parentTask.createTreeImg();
|
||
|
_parentTask.cTaskNameItem[2] = treeImg;
|
||
|
}
|
||
|
_task = new dojox.gantt.GanttTaskControl(task, this, this.ganttChart);
|
||
|
_task.create();
|
||
|
if(task.nextChildTask) _task.nextChildTask = _task.project.getTaskById(task.nextChildTask.id);
|
||
|
_task.adjustPanelTime();
|
||
|
var rowHeight = this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
|
||
|
_task.shiftCurrentTasks(_task, rowHeight);//23
|
||
|
}else{
|
||
|
startTime = startTime || this.project.startDate;
|
||
|
task = new dojox.gantt.GanttTaskItem({
|
||
|
id: id,
|
||
|
name: name,
|
||
|
startTime: startTime,
|
||
|
duration: duration,
|
||
|
percentage: percentage,
|
||
|
previousTaskId: previousTaskId,
|
||
|
taskOwner: taskOwner
|
||
|
});
|
||
|
if(task.startTime <= this.ganttChart.startDate){
|
||
|
return false;
|
||
|
}
|
||
|
if(previousTaskId != ""){
|
||
|
var predTask = this.project.getTaskById(previousTaskId);
|
||
|
if(!predTask){
|
||
|
return false;
|
||
|
}
|
||
|
if(!this.ganttChart.checkPosPreviousTask(predTask, task)){
|
||
|
this.ganttChart.correctPosPreviousTask(predTask, task);
|
||
|
}
|
||
|
if(predTask.parentTask){
|
||
|
return false;
|
||
|
}
|
||
|
task.previousTask = predTask;
|
||
|
}
|
||
|
var isAdd = false;
|
||
|
if(sortRequired){
|
||
|
for(var i = 0; i < this.project.parentTasks.length; i++){
|
||
|
var ppTask = this.project.parentTasks[i];
|
||
|
if(startTime < ppTask.startTime){
|
||
|
this.project.parentTasks.splice(i, 0, task);
|
||
|
if(i > 0){
|
||
|
this.project.parentTasks[i - 1].nextParentTask = task;
|
||
|
task.previousParentTask = this.project.parentTasks[i - 1];
|
||
|
}
|
||
|
if(this.project.parentTasks[i + 1]){
|
||
|
this.project.parentTasks[i + 1].previousParentTask = task;
|
||
|
task.nextParentTask = this.project.parentTasks[i + 1];
|
||
|
}
|
||
|
isAdd = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(!isAdd){
|
||
|
if(this.project.parentTasks.length > 0){
|
||
|
this.project.parentTasks[this.project.parentTasks.length - 1].nextParentTask = task;
|
||
|
task.previousParentTask = this.project.parentTasks[this.project.parentTasks.length - 1];
|
||
|
}
|
||
|
this.project.parentTasks.push(task);
|
||
|
}
|
||
|
_task = new dojox.gantt.GanttTaskControl(task, this, this.ganttChart);
|
||
|
_task.create();
|
||
|
if(task.nextParentTask) _task.nextParentTask = _task.project.getTaskById(task.nextParentTask.id);
|
||
|
_task.adjustPanelTime();
|
||
|
this.arrTasks.push(_task);
|
||
|
var rowHeight = this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
|
||
|
_task.shiftCurrentTasks(_task, rowHeight);
|
||
|
this.projectItem[0].style.display = "inline";
|
||
|
this.setPercentCompleted(this.getPercentCompleted());
|
||
|
this.shiftProjectItem();
|
||
|
this.showDescrProject();
|
||
|
}
|
||
|
this.ganttChart.checkHeighPanelTasks();
|
||
|
this.ganttChart.checkPosition();
|
||
|
return _task;
|
||
|
},
|
||
|
shiftNextProject: function(project, height){
|
||
|
if(project.nextProject){
|
||
|
project.nextProject.shiftProject(height);
|
||
|
this.shiftNextProject(project.nextProject, height);
|
||
|
}
|
||
|
},
|
||
|
shiftProject: function(height){
|
||
|
this.posY = this.posY + height;
|
||
|
this.projectItem[0].style.top = parseInt(this.projectItem[0].style.top) + height + "px";
|
||
|
this.descrProject.style.top = parseInt(this.descrProject.style.top) + height + "px";
|
||
|
this.projectNameItem.style.top = parseInt(this.projectNameItem.style.top) + height + "px";
|
||
|
if(this.arrTasks.length > 0){
|
||
|
this.shiftNextParentTask(this.arrTasks[0], height);
|
||
|
}
|
||
|
},
|
||
|
shiftTask: function(task, height){
|
||
|
task.posY = task.posY + height;
|
||
|
var tNameItem0 = task.cTaskNameItem[0], tNameItem1 = task.cTaskNameItem[1], tNameItem2 = task.cTaskNameItem[2],
|
||
|
tItem0 = task.cTaskItem[0], tItem1 = task.cTaskItem[1], tItem2 = task.cTaskItem[2];
|
||
|
tNameItem0.style.top = parseInt(tNameItem0.style.top) + height + "px";
|
||
|
if(tNameItem2){
|
||
|
tNameItem2.style.top = parseInt(tNameItem2.style.top) + height + "px";
|
||
|
}
|
||
|
if(task.parentTask){
|
||
|
tNameItem1[0].style.top = parseInt(tNameItem1[0].style.top) + height + "px";
|
||
|
tNameItem1[1].style.top = parseInt(tNameItem1[1].style.top) + height + "px";
|
||
|
}
|
||
|
task.cTaskItem[0].style.top = parseInt(task.cTaskItem[0].style.top) + height + "px";
|
||
|
task.descrTask.style.top = parseInt(task.descrTask.style.top) + height + "px";
|
||
|
if(tItem1[0]){
|
||
|
tItem1[0].style.top = parseInt(tItem1[0].style.top) + height + "px";
|
||
|
tItem1[1].style.top = parseInt(tItem1[1].style.top) + height + "px";
|
||
|
tItem1[2].style.top = parseInt(tItem1[2].style.top) + height + "px";
|
||
|
}
|
||
|
},
|
||
|
shiftNextParentTask: function(task, height){
|
||
|
this.shiftTask(task, height);
|
||
|
this.shiftChildTasks(task, height);
|
||
|
if(task.nextParentTask){
|
||
|
this.shiftNextParentTask(task.nextParentTask, height);
|
||
|
}
|
||
|
},
|
||
|
shiftChildTasks: function(task, height){
|
||
|
dojo.forEach(task.childTask, function(cTask){
|
||
|
this.shiftTask(cTask, height);
|
||
|
if(cTask.childTask.length > 0){
|
||
|
this.shiftChildTasks(cTask, height);
|
||
|
}
|
||
|
}, this);
|
||
|
}
|
||
|
});
|
||
|
|
||
|
|
||
|
dojo.declare("dojox.gantt.GanttProjectItem", null, {
|
||
|
constructor: function(configuration){
|
||
|
//id is required
|
||
|
this.id = configuration.id;
|
||
|
this.name = configuration.name || this.id;
|
||
|
this.startDate = configuration.startDate || new Date();
|
||
|
this.parentTasks = [];
|
||
|
},
|
||
|
getTaskById: function(id){
|
||
|
for(var i = 0; i < this.parentTasks.length; i++){
|
||
|
var pTask = this.parentTasks[i];
|
||
|
var task = this.getTaskByIdInTree(pTask, id);
|
||
|
if(task){
|
||
|
return task;
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
},
|
||
|
getTaskByIdInTree: function(parentTask, id){
|
||
|
if(parentTask.id == id){
|
||
|
return parentTask;
|
||
|
}else{
|
||
|
for(var i = 0; i < parentTask.cldTasks.length; i++){
|
||
|
var pcTask = parentTask.cldTasks[i];
|
||
|
if(pcTask.id == id){
|
||
|
return pcTask;
|
||
|
}
|
||
|
if(pcTask.cldTasks.length > 0){
|
||
|
if(pcTask.cldTasks.length > 0){
|
||
|
var cTask = this.getTaskByIdInTree(pcTask, id);
|
||
|
if(cTask){
|
||
|
return cTask;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return null;
|
||
|
},
|
||
|
addTask: function(task){
|
||
|
this.parentTasks.push(task);
|
||
|
task.setProject(this);
|
||
|
},
|
||
|
deleteTask: function(id){
|
||
|
var task = this.getTaskById(id);
|
||
|
if(!task){return;}
|
||
|
if(!task.parentTask){
|
||
|
for(var i = 0; i < this.parentTasks.length; i++){
|
||
|
var pTask = this.parentTasks[i];
|
||
|
if(pTask.id == id){
|
||
|
if(pTask.nextParentTask){
|
||
|
if(pTask.previousParentTask){
|
||
|
pTask.previousParentTask.nextParentTask = pTask.nextParentTask;
|
||
|
pTask.nextParentTask.previousParentTask = pTask.previousParentTask;
|
||
|
}else{
|
||
|
pTask.nextParentTask.previousParentTask = null;
|
||
|
}
|
||
|
}else{
|
||
|
if(pTask.previousParentTask){
|
||
|
pTask.previousParentTask.nextParentTask = null;
|
||
|
}
|
||
|
}
|
||
|
pTask = null;
|
||
|
this.parentTasks.splice(i, 1);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}else{
|
||
|
var parentTask = task.parentTask;
|
||
|
for(var i = 0; i < parentTask.cldTasks.length; i++){
|
||
|
var pcTask = parentTask.cldTasks[i];
|
||
|
if(pcTask.id == id){
|
||
|
if(pcTask.nextChildTask){
|
||
|
if(pcTask.previousChildTask){
|
||
|
pcTask.previousChildTask.nextChildTask = pcTask.nextChildTask;
|
||
|
pcTask.nextChildTask.previousChildTask = pcTask.previousChildTask;
|
||
|
}else{
|
||
|
pcTask.nextChildTask.previousChildTask = null;
|
||
|
}
|
||
|
}else{
|
||
|
if(pcTask.previousChildTask){
|
||
|
pcTask.previousChildTask.nextChildTask = null;
|
||
|
}
|
||
|
}
|
||
|
pcTask = null;
|
||
|
parentTask.cldTasks.splice(i, 1);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
});
|