123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362 |
- // wrapped by build app
- define("dojox/gantt/GanttTaskItem", ["dijit","dojo","dojox","dojo/require!dojo/date/locale,dijit/focus"], function(dijit,dojo,dojox){
- dojo.provide("dojox.gantt.GanttTaskItem");
- dojo.require("dojo.date.locale");
- dojo.require("dijit.focus"); // dijit.focus()
- dojo.declare("dojox.gantt.GanttTaskControl", null, {
- constructor: function(taskInfo, project, chart){
- this.ganttChart = chart;
- this.project = project;
- this.taskItem = taskInfo;
- //control variables
- this.checkMove = false;
- this.checkResize = false;
- this.moveChild = false;
- this.maxPosXMove = -1;
- this.minPosXMove = -1;
- this.maxWidthResize = -1;
- this.minWidthResize = -1;
- this.posX = 0;
- this.posY = 0;
- this.mouseX = 0;
- this.taskItemWidth = 0;
- this.isHide = false;
- this.hideTasksHeight = 0;
- this.isExpanded = true;
- this.descrTask = null;
- this.cTaskItem = null;
- this.cTaskNameItem = null;
- this.parentTask = null;
- this.predTask = null;
- this.childTask = [];
- this.childPredTask = [];
- this.nextChildTask = null;
- this.previousChildTask = null;
- this.nextParentTask = null;
- this.previousParentTask = null;
- },
- createConnectingLinesPN: function(){
- var arrConnectingLinesNames = [];
- var lineVerticalLeft = dojo.create("div", {
- innerHTML: " ",
- className: "ganttTaskLineVerticalLeft"
- }, this.ganttChart.panelNames.firstChild);
- var cTaskName = this.cTaskNameItem[0], pcTaskName = this.parentTask.cTaskNameItem[0];
- dojo.style(lineVerticalLeft, {
- height: (cTaskName.offsetTop - pcTaskName.offsetTop) + "px",
- top: (pcTaskName.offsetTop + 5) + "px",
- left: (pcTaskName.offsetLeft - 9) + "px"
- });
- var LineHorizontalLeft = dojo.create("div", {
- noShade: true,
- color: "#000000",
- className: "ganttTaskLineHorizontalLeft"
- }, this.ganttChart.panelNames.firstChild);
- dojo.style(LineHorizontalLeft, {
- left: (pcTaskName.offsetLeft - 9) + "px",
- top: (cTaskName.offsetTop + 5) + "px",
- height: "1px",
- width: (cTaskName.offsetLeft - pcTaskName.offsetLeft + 4) + "px"
- });
- arrConnectingLinesNames.push(lineVerticalLeft);
- arrConnectingLinesNames.push(LineHorizontalLeft);
- return arrConnectingLinesNames;
- },
- createConnectingLinesDS: function(){
- var contentData = this.ganttChart.contentData.firstChild;
- var arrLines = [];
- var arrowImg = new Image();
- var arrowImg = dojo.create("div", {
- className: "ganttImageArrow"
- });
- //vertical line
- var lineVerticalRight = document.createElement("div");
- //horizontal line
- var lineHorizontal = document.createElement("div");
- var posXPreviousTask = dojo.style(this.predTask.cTaskItem[0], "left");
- var posYPreviousTask = dojo.style(this.predTask.cTaskItem[0], "top");
- var posXChildTask = dojo.style(this.cTaskItem[0], "left");
- var posYChildTask = this.posY + 2;
- //width task item
- var widthChildTask = parseInt(this.predTask.cTaskItem[0].firstChild.firstChild.width);
- var widthPreviousTask = parseInt(this.predTask.cTaskItem[0].firstChild.firstChild.width);
- if(posYPreviousTask < posYChildTask){
- dojo.addClass(lineVerticalRight, "ganttTaskLineVerticalRight");
- dojo.style(lineVerticalRight, {
- height: (posYChildTask - this.ganttChart.heightTaskItem / 2 - posYPreviousTask - 3) + "px",
- width: "1px",
- left: (posXPreviousTask + widthPreviousTask - 20) + "px",
- top: (posYPreviousTask + this.ganttChart.heightTaskItem) + "px"
- });
- dojo.addClass(lineHorizontal, "ganttTaskLineHorizontal");
- dojo.style(lineHorizontal, {
- width: (15 + (posXChildTask - (widthPreviousTask + posXPreviousTask))) + "px",
- left: (posXPreviousTask + widthPreviousTask - 20) + "px",
- top: (posYChildTask + 2) + "px"
- });
- dojo.addClass(arrowImg, "ganttTaskArrowImg");
- dojo.style(arrowImg, {
- left: (posXChildTask - 7) + "px",
- top: (posYChildTask - 1) + "px"
- });
- }else{
- dojo.addClass(lineVerticalRight, "ganttTaskLineVerticalRightPlus");
- dojo.style(lineVerticalRight, {
- height: (posYPreviousTask + 2 - posYChildTask) + "px",
- width: "1px",
- left: (posXPreviousTask + widthPreviousTask - 20) + "px",
- top: (posYChildTask + 2) + "px"
- });
- dojo.addClass(lineHorizontal, "ganttTaskLineHorizontalPlus");
- dojo.style(lineHorizontal, {
- width: (15 + (posXChildTask - (widthPreviousTask + posXPreviousTask))) + "px",
- left: (posXPreviousTask + widthPreviousTask - 20) + "px",
- top: (posYChildTask + 2) + "px"
- });
- dojo.addClass(arrowImg, "ganttTaskArrowImgPlus");
- dojo.style(arrowImg, {
- left: (posXChildTask - 7) + "px",
- top: (posYChildTask - 1) + "px"
- });
- }
- contentData.appendChild(lineVerticalRight);
- contentData.appendChild(lineHorizontal);
- contentData.appendChild(arrowImg);
- arrLines.push(lineVerticalRight);
- arrLines.push(arrowImg);
- arrLines.push(lineHorizontal);
- return arrLines;
- },
- showChildTasks: function(task, isOpen){
- if(isOpen){
- for(var i = 0; i < task.childTask.length; i++){
- var cTask = task.childTask[i],
- cTaskItem0 = cTask.cTaskItem[0], cTaskName0 = cTask.cTaskNameItem[0],
- cTaskItem1 = cTask.cTaskItem[1], cTaskName1 = cTask.cTaskNameItem[1],
- cTaskItem2 = cTask.cTaskItem[2], cTaskName2 = cTask.cTaskNameItem[2];
- if(cTaskItem0.style.display == "none"){
- cTaskItem0.style.display = "inline";
- cTaskName0.style.display = "inline";
- cTask.showDescTask();
- task.isHide = false;
- if(cTaskName2){
- cTaskName2.style.display = "inline";
- isOpen = cTask.isExpanded;
- }
- for(var k = 0; k < cTaskItem1.length; k++){
- cTaskItem1[k].style.display = "inline";
- }
- for(var k = 0; k < cTaskName1.length; k++){
- cTaskName1[k].style.display = "inline";
- }
- (cTask.taskIdentifier) && (cTask.taskIdentifier.style.display = "inline");
- this.hideTasksHeight += this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
- if(cTask.childTask.length > 0){
- this.showChildTasks(cTask, isOpen);
- }
- }
- }
- }
- },
- hideChildTasks: function(task){
- for(var i = 0; i < task.childTask.length; i++){
- var cTask = task.childTask[i],
- cTaskItem0 = cTask.cTaskItem[0], cTaskName0 = cTask.cTaskNameItem[0],
- cTaskItem1 = cTask.cTaskItem[1], cTaskName1 = cTask.cTaskNameItem[1],
- cTaskItem2 = cTask.cTaskItem[2], cTaskName2 = cTask.cTaskNameItem[2];
- if(cTaskItem0.style.display != "none"){
- cTaskItem0.style.display = "none";
- cTaskName0.style.display = "none";
- cTask.hideDescTask();
- task.isHide = true;
- if(cTaskName2){
- cTaskName2.style.display = "none";
- }
- for(var k = 0; k < cTaskItem1.length; k++){
- cTaskItem1[k].style.display = "none";
- }
- for(var k = 0; k < cTaskName1.length; k++){
- cTaskName1[k].style.display = "none";
- }
- (cTask.taskIdentifier) && (cTask.taskIdentifier.style.display = "none");
- this.hideTasksHeight += (this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra);
- if(cTask.childTask.length > 0){
- this.hideChildTasks(cTask);
- }
- }
- }
- },
- shiftCurrentTasks: function(task, height){
- this.shiftNextTask(this, height);
- task.project.shiftNextProject(task.project, height);
- },
- shiftTask: function(task, height){
- task.posY = task.posY + height;
- var taskItem0 = task.cTaskItem[0], taskName0 = task.cTaskNameItem[0],
- taskItem1 = task.cTaskItem[1], taskName1 = task.cTaskNameItem[1],
- taskItem2 = task.cTaskItem[2], taskName2 = task.cTaskNameItem[2];
- taskName0.style.top = parseInt(taskName0.style.top) + height + "px";
- if(taskName2){
- taskName2.style.top = parseInt(taskName2.style.top) + height + "px";
- }
- if(task.parentTask){
- if(parseInt(this.cTaskNameItem[0].style.top) > parseInt(task.parentTask.cTaskNameItem[0].style.top) &&
- (taskName1[0].style.display != "none")){
- taskName1[0].style.height = parseInt(taskName1[0].style.height) + height + "px";
- }else{
- taskName1[0].style.top = parseInt(taskName1[0].style.top) + height + "px";
- }
- taskName1[1].style.top = parseInt(taskName1[1].style.top) + height + "px";
- }
- taskItem0.style.top = parseInt(taskItem0.style.top) + height + "px";
- task.descrTask.style.top = parseInt(task.descrTask.style.top) + height + "px";
- if(task.predTask){
- if(((parseInt(this.cTaskItem[0].style.top) > parseInt(task.predTask.cTaskItem[0].style.top)) ||
- (this.cTaskItem[0].id == task.predTask.taskItem.id)) &&
- taskItem1[0].style.display != "none"){
- taskItem1[0].style.height = parseInt(taskItem1[0].style.height) + height + "px";
- }else{
- taskItem1[0].style.top = parseInt(taskItem1[0].style.top) + height + "px";
- }
- taskItem1[1].style.top = parseInt(taskItem1[1].style.top) + height + "px";
- taskItem1[2].style.top = parseInt(taskItem1[2].style.top) + height + "px";
- }
- },
- shiftNextTask: function(task, height){
- if(task.nextChildTask){
- this.shiftTask(task.nextChildTask, height);
- this.shiftChildTask(task.nextChildTask, height);
- this.shiftNextTask(task.nextChildTask, height);
- }else if(task.parentTask){
- this.shiftNextTask(task.parentTask, height);
- }else if(task.nextParentTask){
- this.shiftTask(task.nextParentTask, height);
- this.shiftChildTask(task.nextParentTask, height);
- this.shiftNextTask(task.nextParentTask, height);
- }
- },
- shiftChildTask: function(task, height){
- dojo.forEach(task.childTask, function(cTask){
- this.shiftTask(cTask, height);
- if(cTask.childTask.length > 0){
- this.shiftChildTask(cTask, height);
- }
- }, this);
- },
- endMove: function(){
- var cTask0 = this.cTaskItem[0];
- var width = dojo.style(cTask0, "left") - this.posX;
- var startTime = this.getDateOnPosition(dojo.style(cTask0, "left"));
- startTime = this.checkPos(startTime);
- if(this.checkMove){
- width = this.ganttChart.getPosOnDate(startTime) - this.posX;
- this.moveCurrentTaskItem(width, this.moveChild);
- this.project.shiftProjectItem();
- }
- this.checkMove = false;
- this.posX = 0;
- this.maxPosXMove = -1;
- this.minPosXMove = -1;
- cTask0.childNodes[1].firstChild.rows[0].cells[0].innerHTML = "";
- this.adjustPanelTime();
- if(this.ganttChart.resource){
- this.ganttChart.resource.refresh();
- }
- },
- checkPos: function(startTime){
- var cTask0 = this.cTaskItem[0];
- var h = startTime.getHours();
- if(h >= 12){
- startTime.setDate(startTime.getDate() + 1);
- startTime.setHours(0);
- if((parseInt(cTask0.firstChild.firstChild.width) + this.ganttChart.getPosOnDate(startTime) > this.maxPosXMove) && (this.maxPosXMove != -1)){
- startTime.setDate(startTime.getDate() - 1);
- startTime.setHours(0);
- }
- }else if((h < 12) && (h != 0)){
- startTime.setHours(0);
- if((this.ganttChart.getPosOnDate(startTime) < this.minPosXMove)){
- startTime.setDate(startTime.getDate() + 1);
- }
- }
- cTask0.style.left = this.ganttChart.getPosOnDate(startTime) + "px";
- return startTime;
- },
- getMaxPosPredChildTaskItem: function(){
- var posPredChildTaskItem = 0;
- var nextPosPredChildTaskItem = 0;
- for(var i = 0; i < this.childPredTask.length; i++){
- nextPosPredChildTaskItem = this.getMaxPosPredChildTaskItemInTree(this.childPredTask[i]);
- if(nextPosPredChildTaskItem > posPredChildTaskItem){
- posPredChildTaskItem = nextPosPredChildTaskItem;
- }
- }
- return posPredChildTaskItem;
- },
- getMaxPosPredChildTaskItemInTree: function(task){
- var cTask0 = task.cTaskItem[0];
- var currentPos = parseInt(cTask0.firstChild.firstChild.width) + dojo.style(cTask0, "left");
- var posPredChildTaskItem = 0;
- var nextPosPredChildTaskItem = 0;
- dojo.forEach(task.childPredTask, function(cpTask){
- nextPosPredChildTaskItem = this.getMaxPosPredChildTaskItemInTree(cpTask);
- if(nextPosPredChildTaskItem > posPredChildTaskItem){
- posPredChildTaskItem = nextPosPredChildTaskItem;
- }
- }, this);
- return posPredChildTaskItem > currentPos ? posPredChildTaskItem : currentPos;
- },
- moveCurrentTaskItem: function(width, moveChild){
- var taskItem = this.cTaskItem[0];
- this.taskItem.startTime = new Date(this.ganttChart.startDate);
- this.taskItem.startTime.setHours(this.taskItem.startTime.getHours() + (parseInt(taskItem.style.left) / this.ganttChart.pixelsPerHour));
- this.showDescTask();
- var cTask1 = this.cTaskItem[1];
- if(cTask1.length > 0){
- cTask1[2].style.width = parseInt(cTask1[2].style.width) + width + "px";
- cTask1[1].style.left = parseInt(cTask1[1].style.left) + width + "px";
- }
- dojo.forEach(this.childTask, function(cTask){
- if(!cTask.predTask){
- this.moveChildTaskItems(cTask, width, moveChild);
- }
- }, this);
- dojo.forEach(this.childPredTask, function(cpTask){
- this.moveChildTaskItems(cpTask, width, moveChild);
- }, this);
- },
- moveChildTaskItems: function(task, width, moveChild){
- var taskItem = task.cTaskItem[0];
- if(moveChild){
- taskItem.style.left = parseInt(taskItem.style.left) + width + "px";
- task.adjustPanelTime();
- task.taskItem.startTime = new Date(this.ganttChart.startDate);
- task.taskItem.startTime.setHours(task.taskItem.startTime.getHours() + (parseInt(taskItem.style.left) / this.ganttChart.pixelsPerHour));
- var ctItem = task.cTaskItem[1];
- dojo.forEach(ctItem, function(item){
- item.style.left = parseInt(item.style.left) + width + "px";
- }, this);
- dojo.forEach(task.childTask, function(cTask){
- if(!cTask.predTask){
- this.moveChildTaskItems(cTask, width, moveChild);
- }
- }, this);
- dojo.forEach(task.childPredTask, function(cpTask){
- this.moveChildTaskItems(cpTask, width, moveChild);
- }, this);
- }else{
- var ctItem = task.cTaskItem[1];
- if(ctItem.length > 0){
- var item0 = ctItem[0], item2 = ctItem[2];
- item2.style.left = parseInt(item2.style.left) + width + "px";
- item2.style.width = parseInt(item2.style.width) - width + "px";
- item0.style.left = parseInt(item0.style.left) + width + "px";
- }
- }
- task.moveDescTask();
- },
- adjustPanelTime: function(){
- var taskItem = this.cTaskItem[0];
- var width = parseInt(taskItem.style.left) + parseInt(taskItem.firstChild.firstChild.width) + this.ganttChart.panelTimeExpandDelta;
- width += this.descrTask.offsetWidth;
- this.ganttChart.adjustPanelTime(width);
- },
- getDateOnPosition: function(position){
- var date = new Date(this.ganttChart.startDate);
- date.setHours(date.getHours() + (position / this.ganttChart.pixelsPerHour));
- return date;
- },
- moveItem: function(event){
- var pageX = event.screenX;
- var posTaskItem = (this.posX + (pageX - this.mouseX));
- var widthTaskItem = parseInt(this.cTaskItem[0].childNodes[0].firstChild.width);
- var posTaskItemR = posTaskItem + widthTaskItem;
- if(this.checkMove){
- if(((this.minPosXMove <= posTaskItem)) &&
- ((posTaskItemR <= this.maxPosXMove) || (this.maxPosXMove == -1))){
- this.moveTaskItem(posTaskItem);
- }
- }
- },
- moveTaskItem: function(posX){
- var cTask = this.cTaskItem[0];
- cTask.style.left = posX + "px";
- cTask.childNodes[1].firstChild.rows[0].cells[0].innerHTML = this.getDateOnPosition(posX).getDate() + '.' + (this.getDateOnPosition(posX).getMonth() + 1) + '.' + this.getDateOnPosition(posX).getUTCFullYear();
- },
- resizeItem: function(event){
- if(this.checkResize){
- var taskItem = this.cTaskItem[0];
- var mouseX = event.screenX;
- var width = (mouseX - this.mouseX);
- var widthTaskItem = this.taskItemWidth + (mouseX - this.mouseX);
- if(widthTaskItem >= this.taskItemWidth){
- if((widthTaskItem <= this.maxWidthResize) || (this.maxWidthResize == -1)){
- this.resizeTaskItem(widthTaskItem);
- }else if((this.maxWidthResize != -1) && (widthTaskItem > this.maxWidthResize)){
- this.resizeTaskItem(this.maxWidthResize);
- }
- }else if(widthTaskItem <= this.taskItemWidth){
- if(widthTaskItem >= this.minWidthResize){
- this.resizeTaskItem(widthTaskItem);
- }else if(widthTaskItem < this.minWidthResize){
- this.resizeTaskItem(this.minWidthResize);
- }
- }
- }
- },
- resizeTaskItem: function(width){
- var taskItem = this.cTaskItem[0];
- var countHours = Math.round(width / this.ganttChart.pixelsPerWorkHour);
- var trow = taskItem.childNodes[0].firstChild.rows[0],
- rc0 = trow.cells[0], rc1 = trow.cells[1];
- rc0 && (rc0.firstChild.style.width = parseInt(rc0.width) * width / 100 + "px");
- rc1 && (rc1.firstChild.style.width = parseInt(rc1.width) * width / 100 + "px");
- taskItem.childNodes[0].firstChild.width = width + "px";
- taskItem.childNodes[1].firstChild.width = width + "px";
- //resize info
- this.cTaskItem[0].childNodes[1].firstChild.rows[0].cells[0].innerHTML = countHours;
- var tcNode2 = taskItem.childNodes[2];
- tcNode2.childNodes[0].style.width = width + "px";
- tcNode2.childNodes[1].style.left = width - 10 + "px";
- },
- endResizeItem: function(){
- var taskItem = this.cTaskItem[0];
- if((this.taskItemWidth != parseInt(taskItem.childNodes[0].firstChild.width))){
- var posXL = taskItem.offsetLeft;
- var posXR = taskItem.offsetLeft + parseInt(taskItem.childNodes[0].firstChild.width);
- var countHours = Math.round((posXR - posXL) / this.ganttChart.pixelsPerWorkHour);
- this.taskItem.duration = countHours;
- if(this.childPredTask.length > 0){
- for(var j = 0; j < this.childPredTask.length; j++){
- var cpctItem = this.childPredTask[j].cTaskItem[1],
- item0 = cpctItem[0], item2 = cpctItem[2], tcNode0 = taskItem.childNodes[0];
- item2.style.width = parseInt(item2.style.width) - (parseInt(tcNode0.firstChild.width) - this.taskItemWidth) + "px";
- item2.style.left = parseInt(item2.style.left) + (parseInt(tcNode0.firstChild.width) - this.taskItemWidth) + "px";
- item0.style.left = parseInt(item0.style.left) + (parseInt(tcNode0.firstChild.width) - this.taskItemWidth) + "px";
- }
- }
- }
- this.cTaskItem[0].childNodes[1].firstChild.rows[0].cells[0].innerHTML = "";
- this.checkResize = false;
- this.taskItemWidth = 0;
- this.mouseX = 0;
- this.showDescTask();
- this.project.shiftProjectItem();
- this.adjustPanelTime();
- if(this.ganttChart.resource){
- this.ganttChart.resource.refresh();
- }
- },
- startMove: function(event){
- this.moveChild = event.ctrlKey;
- this.mouseX = event.screenX;
- this.getMoveInfo();
- this.checkMove = true;
- this.hideDescTask();
- },
- showDescTask: function(){
- var posX = (parseInt(this.cTaskItem[0].style.left) + this.taskItem.duration * this.ganttChart.pixelsPerWorkHour + 10);
- this.descrTask.style.left = posX + "px";
- this.descrTask.innerHTML = this.objKeyToStr(this.getTaskOwner());
- this.descrTask.style.visibility = 'visible';
- },
- hideDescTask: function(){
- dojo.style(this.descrTask, "visibility", "hidden");
- },
- buildResourceInfo: function(resourceInfo){
- if(this.childTask && this.childTask.length > 0){
- for(var i = 0; i < this.childTask.length; i++){
- var cTask = this.childTask[i];
- cTask.buildResourceInfo(resourceInfo);
- }
- }
- if(dojo.trim(this.taskItem.taskOwner).length > 0){
- var owners = this.taskItem.taskOwner.split(";");
- for(var i = 0; i < owners.length; i++){
- var o = owners[i];
- if(dojo.trim(o).length <= 0){
- continue;
- }
- resourceInfo[o] ? (resourceInfo[o].push(this)) : (resourceInfo[o] = [this]);
- }
- }
- },
- objKeyToStr: function(obj, delm){
- var returnStr = "";
- delm = delm || " ";
- if(obj){
- for(var key in obj){
- returnStr += delm + key;
- }
- }
- return returnStr;
- },
- getTaskOwner: function(){
- var tOwner = {};
- if(dojo.trim(this.taskItem.taskOwner).length > 0){
- var owners = this.taskItem.taskOwner.split(";");
- for(var i = 0; i < owners.length; i++){
- var o = owners[i];
- tOwner[o] = 1;
- }
- }
- dojo.forEach(this.childTask, function(ctask){
- dojo.mixin(tOwner, ctask.getTaskOwner());
- }, this);
- return tOwner;
- },
- moveDescTask: function(){
- var posX = (parseInt(this.cTaskItem[0].style.left) + this.taskItem.duration * this.ganttChart.pixelsPerWorkHour + 10);
- this.descrTask.style.left = posX + "px";
- },
- getMoveInfo: function(){
- this.posX = parseInt(this.cTaskItem[0].style.left);
- var widthTaskItem = parseInt(this.cTaskItem[0].childNodes[0].firstChild.width);
- var posParentTaskItem = !this.parentTask ? 0 : parseInt(this.parentTask.cTaskItem[0].style.left);
- var posPredTaskItem = !this.predTask ? 0 : parseInt(this.predTask.cTaskItem[0].style.left) + parseInt(this.predTask.cTaskItem[0].childNodes[0].firstChild.width);
- var widthParentTaskItem = !this.parentTask ? 0 : parseInt(this.parentTask.cTaskItem[0].childNodes[0].firstChild.width);
-
- var childPredPosX = 0;
- var childParentPosX = 0;
- var childParentPosXR = 0;
- if(this.childPredTask.length > 0){
- var posChildTaskItem = null;
- dojo.forEach(this.childPredTask, function(cpTask){
- if((!posChildTaskItem) || ((posChildTaskItem) && (posChildTaskItem > parseInt(cpTask.cTaskItem[0].style.left)))){
- posChildTaskItem = parseInt(cpTask.cTaskItem[0].style.left);
- }
- }, this);
- childPredPosX = posChildTaskItem;
- }
- if(this.childTask.length > 0){
- var posChildTaskItemR = null;
- dojo.forEach(this.childTask, function(cTask){
- if((!posChildTaskItemR) || ((posChildTaskItemR) && (posChildTaskItemR > (parseInt(cTask.cTaskItem[0].style.left))))){
- posChildTaskItemR = parseInt(cTask.cTaskItem[0].style.left);
- }
- }, this);
- childParentPosXR = posChildTaskItemR;
- var posChildTaskItem = null;
- dojo.forEach(this.childTask, function(cTask){
- if((!posChildTaskItem) || ((posChildTaskItem)
- && (posChildTaskItem < (parseInt(cTask.cTaskItem[0].style.left) + parseInt(cTask.cTaskItem[0].firstChild.firstChild.width))))){
- posChildTaskItem = parseInt(cTask.cTaskItem[0].style.left) + parseInt(cTask.cTaskItem[0].firstChild.firstChild.width);
- }
- }, this);
- childParentPosX = posChildTaskItem;
- }
- if(!this.moveChild){
- if(this.childPredTask.length > 0){
- if(this.maxPosXMove < childPredPosX) this.maxPosXMove = childPredPosX;
- }
- if(this.childTask.length > 0){
- if((this.childPredTask.length > 0) && (this.maxPosXMove - widthTaskItem) > childParentPosXR){
- this.maxPosXMove = this.maxPosXMove - ((this.maxPosXMove - widthTaskItem) - childParentPosXR);
- }
- if(!(this.childPredTask.length > 0)){
- this.maxPosXMove = childParentPosXR + widthTaskItem;
- }
- this.minPosXMove = (childParentPosX - widthTaskItem);
- }
- if(posParentTaskItem > 0){
- if((!(this.childPredTask.length > 0)) && (this.childTask.length > 0)){
- if(this.maxPosXMove > posParentTaskItem + widthParentTaskItem){
- this.maxPosXMove = posParentTaskItem + widthParentTaskItem;
- }
- }
- if(this.minPosXMove <= posParentTaskItem){
- this.minPosXMove = posParentTaskItem;
- }
- if((!(this.childTask.length > 0)) && (!(this.childPredTask.length > 0))){
- this.maxPosXMove = posParentTaskItem + widthParentTaskItem;
- }else if((!(this.childTask.length > 0)) && (this.childPredTask.length > 0)){
- if((posParentTaskItem + widthParentTaskItem) > posPredTaskItem){
- this.maxPosXMove = childPredPosX;
- }
- }
- }
- if(posPredTaskItem > 0){
- if(this.minPosXMove <= posPredTaskItem){
- this.minPosXMove = posPredTaskItem;
- }
- }
- if((posPredTaskItem == 0) && (posParentTaskItem == 0)){
- if(this.minPosXMove <= this.ganttChart.initialPos){
- this.minPosXMove = this.ganttChart.initialPos;
- }
- }
- }else{
- if((posParentTaskItem > 0) && (posPredTaskItem == 0)){
- this.minPosXMove = posParentTaskItem;
- this.maxPosXMove = posParentTaskItem + widthParentTaskItem;
- }else if((posParentTaskItem == 0) && (posPredTaskItem == 0)){
- this.minPosXMove = this.ganttChart.initialPos;
- this.maxPosXMove = -1;
- }else if((posParentTaskItem > 0) && (posPredTaskItem > 0)){
- this.minPosXMove = posPredTaskItem;
- this.maxPosXMove = posParentTaskItem + widthParentTaskItem;
- }else if((posParentTaskItem == 0) && (posPredTaskItem > 0)){
- this.minPosXMove = posPredTaskItem;
- this.maxPosXMove = -1;
- }
- if((this.parentTask) && (this.childPredTask.length > 0)){
- var posChildTaskItem = this.getMaxPosPredChildTaskItem(this);
- var posParentTaskItem = parseInt(this.parentTask.cTaskItem[0].style.left) + parseInt(this.parentTask.cTaskItem[0].firstChild.firstChild.width);
- this.maxPosXMove = this.posX + widthTaskItem + posParentTaskItem - posChildTaskItem;
- }
- }
- },
- startResize: function(event){
- this.mouseX = event.screenX;
- this.getResizeInfo();
- this.hideDescTask();
- this.checkResize = true;
- this.taskItemWidth = parseInt(this.cTaskItem[0].firstChild.firstChild.width);
- },
- getResizeInfo: function(){
- var cTask = this.cTaskItem[0];
- var posParentTaskItem = !this.parentTask ? 0 : parseInt(this.parentTask.cTaskItem[0].style.left);
- var widthParentTaskItem = !this.parentTask ? 0 : parseInt(this.parentTask.cTaskItem[0].childNodes[0].firstChild.width);
- var posTaskItem = parseInt(cTask.style.left);
- var childPredPosX = 0;
- var childParentPosX = 0;
- if(this.childPredTask.length > 0){
- var posChildTaskItem = null;
- dojo.forEach(this.childPredTask, function(cpTask){
- if((!posChildTaskItem) || ((posChildTaskItem) && (posChildTaskItem > parseInt(cpTask.cTaskItem[0].style.left)))){
- posChildTaskItem = parseInt(cpTask.cTaskItem[0].style.left);
- }
- }, this);
- childPredPosX = posChildTaskItem;
- }
- if(this.childTask.length > 0){
- var posChildTaskItem = null;
- dojo.forEach(this.childTask, function(cTask){
- if((!posChildTaskItem) || ((posChildTaskItem) && (posChildTaskItem < (parseInt(cTask.cTaskItem[0].style.left) + parseInt(cTask.cTaskItem[0].firstChild.firstChild.width))))){
- posChildTaskItem = parseInt(cTask.cTaskItem[0].style.left) + parseInt(cTask.cTaskItem[0].firstChild.firstChild.width);
- }
- }, this);
- childParentPosX = posChildTaskItem;
- }
- this.minWidthResize = this.ganttChart.pixelsPerDay;
- if(this.childTask.length > 0){
- this.minWidthResize = childParentPosX - posTaskItem;
- }
- if((this.childPredTask.length > 0) && (!this.parentTask)){
- this.maxWidthResize = childPredPosX - posTaskItem;
- }else if((this.childPredTask.length > 0) && (this.parentTask)){
- var w1 = posParentTaskItem + widthParentTaskItem - posTaskItem;
- var w2 = childPredPosX - posTaskItem;
- this.maxWidthResize = Math.min(w1, w2);
- }else if((this.childPredTask.length == 0) && (this.parentTask)){
- this.maxWidthResize = posParentTaskItem + widthParentTaskItem - posTaskItem;
- }
- },
- createTaskItem: function(){
- this.posX = this.ganttChart.getPosOnDate(this.taskItem.startTime);
- var itemControl = dojo.create("div", {
- id: this.taskItem.id,
- className: "ganttTaskItemControl"
- });
- dojo.style(itemControl, {
- left: this.posX + "px",
- top: this.posY + "px"
- });
- var divTaskItem = dojo.create("div", {className: "ganttTaskDivTaskItem"}, itemControl);
- var tblTaskItem = dojo.create("table", {
- cellPadding: "0",
- cellSpacing: "0",
- width: this.taskItem.duration * this.ganttChart.pixelsPerWorkHour + "px",
- className: "ganttTaskTblTaskItem"
- }, divTaskItem);
- var rowTblTask = tblTaskItem.insertRow(tblTaskItem.rows.length);
- if(this.taskItem.percentage != 0){
- var cellTblTask = dojo.create("td", {
- height: this.ganttChart.heightTaskItem + "px",
- width: this.taskItem.percentage + "%"
- }, rowTblTask);
- cellTblTask.style.lineHeight = "1px";
- var imageProgress = dojo.create("div", {
- className: "ganttImageTaskProgressFilled"
- }, cellTblTask);
- dojo.style(imageProgress, {
- width: (this.taskItem.percentage * this.taskItem.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- }
- if(this.taskItem.percentage != 100){
- var cellTblTask = dojo.create("td", {
- height: this.ganttChart.heightTaskItem + "px",
- width: (100 - this.taskItem.percentage) + "%"
- }, rowTblTask);
- cellTblTask.style.lineHeight = "1px";
- var imageProgressFill = dojo.create("div", {
- className: "ganttImageTaskProgressBg"
- }, cellTblTask);
- dojo.style(imageProgressFill, {
- width: ((100 - this.taskItem.percentage) * this.taskItem.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- }
- if(this.ganttChart.isContentEditable){
- var divTaskInfo = dojo.create("div", {className: "ganttTaskDivTaskInfo"}, itemControl);
- var tblTaskInfo = dojo.create("table", {
- cellPadding: "0",
- cellSpacing: "0",
- height: this.ganttChart.heightTaskItem + "px",
- width: this.taskItem.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);
- var divTaskName = dojo.create("div", {className: "ganttTaskDivTaskName"}, itemControl);
- var divMove = dojo.create("div", {}, divTaskName);
- dojo.create("input", {
- className: "ganttTaskDivMoveInput",
- type: "text"
- }, divMove);
- dojo.isIE && dojo.style(divMove, {
- background: "#000000",
- filter: "alpha(opacity=0)"
- });
- dojo.style(divMove, {
- height: this.ganttChart.heightTaskItem + "px",
- width: this.taskItem.duration * this.ganttChart.pixelsPerWorkHour + "px"
- });
- //Creation resize area
- var divResize = dojo.create("div", {className: "ganttTaskDivResize"}, divTaskName);
- dojo.create("input", {
- className: "ganttTaskDivResizeInput",
- type: "text"
- }, divResize);
- dojo.style(divResize, {
- left: (this.taskItem.duration * this.ganttChart.pixelsPerWorkHour - 10) + "px",
- height: this.ganttChart.heightTaskItem + "px",
- width: "10px"
- });
- this.ganttChart._events.push(
- dojo.connect(divMove, "onmousedown", this, function(event){
- //start move
- this.moveMoveConn = dojo.connect(document, "onmousemove", this, function(e){
- this.checkMove && this.moveItem(e);
- });
- this.moveUpConn = dojo.connect(document, "onmouseup", this, function(e){
- if(this.checkMove){
- this.endMove();
- this.ganttChart.isMoving = false;
- document.body.releaseCapture && document.body.releaseCapture();
- dojo.disconnect(this.moveMoveConn);
- dojo.disconnect(this.moveUpConn);
- }
- });
- this.startMove(event);
- this.ganttChart.isMoving = true;
- document.body.setCapture && document.body.setCapture(false);
- })
- );
- this.ganttChart._events.push(
- dojo.connect(divMove, "onmouseover", this, function(event){
- event.target && (event.target.style.cursor = "move");
- })
- );
- this.ganttChart._events.push(
- dojo.connect(divMove, "onmouseout", this, function(event){
- event.target.style.cursor = "";
- })
- );
- this.ganttChart._events.push(
- dojo.connect(divResize, "onmousedown", this, function(event){
- //start resize
- this.resizeMoveConn = dojo.connect(document, "onmousemove", this, function(e){
- this.checkResize && this.resizeItem(e);
- });
- this.resizeUpConn = dojo.connect(document, "onmouseup", this, function(e){
- if(this.checkResize){
- this.endResizeItem();
- this.ganttChart.isResizing = false;
- document.body.releaseCapture && document.body.releaseCapture();
- dojo.disconnect(this.resizeMoveConn);
- dojo.disconnect(this.resizeUpConn);
- }
- });
- this.startResize(event);
- this.ganttChart.isResizing = true;
- document.body.setCapture && document.body.setCapture(false);
- })
- );
- this.ganttChart._events.push(
- dojo.connect(divResize, "onmouseover", this, function(event){
- (!this.ganttChart.isMoving) && (!this.ganttChart.isResizing) && event.target && (event.target.style.cursor = "e-resize");
- })
- );
- this.ganttChart._events.push(
- dojo.connect(divResize, "onmouseout", this, function(event){
- !this.checkResize && event.target && (event.target.style.cursor = "");
- })
- );
- }
- return itemControl;
- },
- createTaskNameItem: function(){
- var divName = dojo.create("div", {
- id: this.taskItem.id,
- className: "ganttTaskTaskNameItem",
- title: this.taskItem.name + ", id: " + this.taskItem.id + " ",
- innerHTML: this.taskItem.name
- });
- dojo.style(divName, "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, "ganttTaskTaskNameItemHover");
- 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, "ganttTaskTaskNameItemHover");
- 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;
- },
- createTaskDescItem: function(){
- var posX = (this.posX + this.taskItem.duration * this.ganttChart.pixelsPerWorkHour + 10);
- var divDesc = dojo.create("div", {
- innerHTML: this.objKeyToStr(this.getTaskOwner()),
- className: "ganttTaskDescTask"
- });
- dojo.style(divDesc, {
- left: posX + "px",
- top: this.posY + "px"
- });
- return this.descrTask = divDesc;
- },
- checkWidthTaskNameItem: function(){
- if(this.cTaskNameItem[0].offsetWidth + this.cTaskNameItem[0].offsetLeft > this.ganttChart.maxWidthTaskNames){
- var width = this.cTaskNameItem[0].offsetWidth + this.cTaskNameItem[0].offsetLeft - this.ganttChart.maxWidthTaskNames;
- var countChar = Math.round(width / (this.cTaskNameItem[0].offsetWidth / this.cTaskNameItem[0].firstChild.length));
- var tName = this.taskItem.name.substring(0, this.cTaskNameItem[0].firstChild.length - countChar - 3);
- tName += "...";
- this.cTaskNameItem[0].innerHTML = tName;
- }
- },
- refreshTaskItem: function(itemControl){
- this.posX = this.ganttChart.getPosOnDate(this.taskItem.startTime);
- dojo.style(itemControl, {
- "left": this.posX + "px"
- });
- var divTaskItem = itemControl.childNodes[0];
- var tblTaskItem = divTaskItem.firstChild;
- tblTaskItem.width = (!this.taskItem.duration ? 1 : this.taskItem.duration * this.ganttChart.pixelsPerWorkHour) + "px";
- var rowTblTask = tblTaskItem.rows[0];
- if(this.taskItem.percentage != 0){
- var cellTblTask = rowTblTask.firstChild;
- cellTblTask.height = this.ganttChart.heightTaskItem + "px";
- cellTblTask.width = this.taskItem.percentage + "%";
- cellTblTask.style.lineHeight = "1px";
- var imageProgress = cellTblTask.firstChild;
- dojo.style(imageProgress, {
- width: (!this.taskItem.duration ? 1 : (this.taskItem.percentage * this.taskItem.duration * this.ganttChart.pixelsPerWorkHour / 100)) + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- }
- if(this.taskItem.percentage != 100){
- var cellTblTask = rowTblTask.lastChild;
- cellTblTask.height = this.ganttChart.heightTaskItem + "px";
- cellTblTask.width = (100 - this.taskItem.percentage) + "%";
- cellTblTask.style.lineHeight = "1px";
- var imageProgressFill = cellTblTask.firstChild;
- dojo.style(imageProgressFill, {
- width: (!this.taskItem.duration ? 1 : ((100 - this.taskItem.percentage) * this.taskItem.duration * this.ganttChart.pixelsPerWorkHour / 100)) + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- }
- if(this.ganttChart.isContentEditable){
- var divTaskInfo = itemControl.childNodes[1];
- var tblTaskInfo = divTaskInfo.firstChild;
- tblTaskInfo.height = this.ganttChart.heightTaskItem + "px";
- tblTaskInfo.width = (!this.taskItem.duration ? 1 : (this.taskItem.duration * this.ganttChart.pixelsPerWorkHour)) + "px";
- var rowTaskInfo = tblTaskInfo.rows[0];
- var cellTaskInfo = rowTaskInfo.firstChild;
- cellTaskInfo.height = this.ganttChart.heightTaskItem + "px";
- var divTaskName = itemControl.childNodes[2];
- var divMove = divTaskName.firstChild;
- divMove.style.height = this.ganttChart.heightTaskItem + "px";
- divMove.style.width = (!this.taskItem.duration ? 1 : (this.taskItem.duration * this.ganttChart.pixelsPerWorkHour)) + "px";
- //Creation resize area
- var divResize = divTaskName.lastChild;
- dojo.style(divResize, {
- "left": (this.taskItem.duration * this.ganttChart.pixelsPerWorkHour - 10) + "px"
- });
- divResize.style.height = this.ganttChart.heightTaskItem + "px";
- divResize.style.width = "10px";
- }
- return itemControl;
- },
- refreshTaskDesc: function(divDesc){
- var posX = (this.posX + this.taskItem.duration * this.ganttChart.pixelsPerWorkHour + 10);
- dojo.style(divDesc, {
- "left": posX + "px"
- });
- return divDesc;
- },
- refreshConnectingLinesDS: function(arrLines){
- var arrowImg = arrLines[1];
- var lineVerticalRight = arrLines[0];
- //horizontal line
- var lineHorizontal = arrLines[2];
- var posXPreviousTask = dojo.style(this.predTask.cTaskItem[0], "left");
- var posYPreviousTask = dojo.style(this.predTask.cTaskItem[0], "top");
- var posXChildTask = dojo.style(this.cTaskItem[0], "left");
- var posYChildTask = this.posY + 2;
- //width task item
- var widthChildTask = parseInt(this.predTask.cTaskItem[0].firstChild.firstChild.width);
- var widthPreviousTask = parseInt(this.predTask.cTaskItem[0].firstChild.firstChild.width);
- if(posYPreviousTask < posYChildTask){
- dojo.style(lineVerticalRight, {
- "height": (posYChildTask - this.ganttChart.heightTaskItem / 2 - posYPreviousTask - 3) + "px",
- "left": (posXPreviousTask + widthPreviousTask - 20) + "px"
- });
- dojo.style(lineHorizontal, {
- "width": (15 + (posXChildTask - (widthPreviousTask + posXPreviousTask))) + "px",
- "left": (posXPreviousTask + widthPreviousTask - 20) + "px"
- });
-
- dojo.style(arrowImg, {
- "left": (posXChildTask - 7) + "px"
- });
- }else{
- dojo.style(lineVerticalRight, {
- "height": (posYPreviousTask + 2 - posYChildTask) + "px",
- "left": (posXPreviousTask + widthPreviousTask - 20) + "px"
- });
- dojo.style(lineHorizontal, {
- "width": (15 + (posXChildTask - (widthPreviousTask + posXPreviousTask))) + "px",
- "left": (posXPreviousTask + widthPreviousTask - 20) + "px"
- });
- dojo.style(arrowImg, {
- "left": (posXChildTask - 7) + "px"
- });
- }
- return arrLines;
- },
- postLoadData: function(){
- //TODO e.g. task relative info...
- },
- refresh: function(){
- if(this.childTask && this.childTask.length > 0){
- dojo.forEach(this.childTask, function(cTask){
- cTask.refresh();
- }, this);
- }
- //creation task item
- this.refreshTaskItem(this.cTaskItem[0]);
- this.refreshTaskDesc(this.cTaskItem[0].nextSibling);
- //Create Connecting Lines
- var arrConnectingLines = [];
- if(this.taskItem.previousTask && this.predTask){
- this.refreshConnectingLinesDS(this.cTaskItem[1]);
- }
- return this;
- },
- create: function(){
- var containerTasks = this.ganttChart.contentData.firstChild;
- var containerNames = this.ganttChart.panelNames.firstChild;
- var previousTask = this.taskItem.previousTask;
- var parentTask = this.taskItem.parentTask;
- var isCParentTask = (this.taskItem.cldTasks.length > 0) ? true : false;
- this.cTaskItem = [];
- this.cTaskNameItem = [];
- //creation arrTasks
- if(!parentTask){
- if(this.taskItem.previousParentTask){
- this.previousParentTask = this.project.getTaskById(this.taskItem.previousParentTask.id);
- var lastChildTask = this.ganttChart.getLastChildTask(this.previousParentTask);
- this.posY = parseInt(lastChildTask.cTaskItem[0].style.top)
- + this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
- this.previousParentTask.nextParentTask = this;
- }else{
- this.posY = parseInt(this.project.projectItem[0].style.top)
- + this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
- }
- }
- if(parentTask){
- var task = this.project.getTaskById(this.taskItem.parentTask.id);
- this.parentTask = task;
-
- if(this.taskItem.previousChildTask){
- this.previousChildTask = this.project.getTaskById(this.taskItem.previousChildTask.id);
- var lastChildTask = this.ganttChart.getLastChildTask(this.previousChildTask);
- this.posY = dojo.style(lastChildTask.cTaskItem[0], "top")
- + this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
- this.previousChildTask.nextChildTask = this;
- }else{
- this.posY = dojo.style(task.cTaskItem[0], "top")
- + this.ganttChart.heightTaskItem + this.ganttChart.heightTaskItemExtra;
- }
- task.childTask.push(this);
- }
- if(previousTask){
- var task = this.project.getTaskById(previousTask.id);
- this.predTask = task;
- task.childPredTask.push(this);
- }
- //creation task item
- this.cTaskItem.push(this.createTaskItem());
- containerTasks.appendChild(this.cTaskItem[0]);
- if(this.ganttChart.panelNames){
- this.cTaskNameItem.push(this.createTaskNameItem());
- this.ganttChart.panelNames.firstChild.appendChild(this.cTaskNameItem[0]);
- }
- containerTasks.appendChild(this.createTaskDescItem());
- //Create Connecting Lines
- var arrConnectingLines = [];
- if(previousTask){
- arrConnectingLines = this.createConnectingLinesDS();
- }
- this.cTaskItem.push(arrConnectingLines);
- if(this.ganttChart.panelNames){
- //Create Connecting Lines
- var arrConnectingLinesNames = [];
- if(parentTask){
- this.cTaskNameItem[0].style.left = dojo.style(this.parentTask.cTaskNameItem[0], "left") + 15 + "px";
- arrConnectingLinesNames = this.createConnectingLinesPN();
- }
- this.checkWidthTaskNameItem();
- //Identifier
- this.checkPosition();
- var treeImg = null;
- if(isCParentTask){
- treeImg = this.createTreeImg();
- }
- this.cTaskNameItem.push(arrConnectingLinesNames);
- this.cTaskNameItem.push(treeImg);
- }
- this.adjustPanelTime();
- return this;
- },
- checkPosition: function(){
- //task name position: check Task Identifier
- if(!this.ganttChart.withTaskId){
- return;
- }
- var pos = dojo.coords(this.cTaskNameItem[0], true);
- if(this.taskIdentifier){
- if(this.childTask && this.childTask.length > 0){
- dojo.forEach(this.childTask, function(cTask){
- cTask.checkPosition();
- }, this);
- }
- dojo.style(this.taskIdentifier, {
- "left": (pos.l + pos.w + 4) + "px",
- "top": (pos.t - 1) + "px"
- });
- }else{
- this.taskIdentifier = dojo.create("div", {
- id: "TaskId_" + this.taskItem.id,
- className: "ganttTaskIdentifier",
- title: this.taskItem.id,
- innerHTML: this.taskItem.id
- }, this.cTaskNameItem[0].parentNode);
- dojo.style(this.taskIdentifier, {
- left: (pos.l + pos.w + 4) + "px",
- top: (pos.t - 1) + "px"
- });
- }
- },
- createTreeImg: function(){
- var treeImg = dojo.create("div", {
- id: this.taskItem.id,
- className: "ganttImageTreeCollapse"
- });
- dojo.attr(treeImg, "tabIndex", 0);
- dojo.forEach(["onclick", "onkeydown"], function(e){
- this.ganttChart._events.push(
- dojo.connect(treeImg, e, this, function(evt){
- if(e == "onkeydown" && evt.keyCode != dojo.keys.ENTER){ return; }
- if(this.isExpanded){
- dojo.removeClass(treeImg, "ganttImageTreeCollapse");
- dojo.addClass(treeImg, "ganttImageTreeExpand");
- this.isExpanded = false;
- this.hideChildTasks(this);
- this.shiftCurrentTasks(this, -this.hideTasksHeight);
- this.ganttChart.checkPosition();
- }else{
- dojo.removeClass(treeImg, "ganttImageTreeExpand");
- dojo.addClass(treeImg, "ganttImageTreeCollapse");
- this.isExpanded = true;
- this.shiftCurrentTasks(this, this.hideTasksHeight);
- this.showChildTasks(this, true);
- this.hideTasksHeight = 0;
- this.ganttChart.checkPosition();
- }
- })
- );
- }, this);
- this.ganttChart.panelNames.firstChild.appendChild(treeImg);
- dojo.addClass(treeImg, "ganttTaskTreeImage");
- dojo.style(treeImg, {
- left: (dojo.style(this.cTaskNameItem[0], "left") - 12) + "px",
- top: (dojo.style(this.cTaskNameItem[0], "top") + 3) + "px"
- });
- return treeImg;
- },
- setPreviousTask: function(previousTaskId){
- if(previousTaskId == ""){
- this.clearPredTask();
- }else{
- var task = this.taskItem;
- if(task.id == previousTaskId){
- return false;
- }
- var predTaskObj = this.project.getTaskById(previousTaskId);
- if(!predTaskObj){
- return false;
- }
- var predTask = predTaskObj.taskItem;
- var a1 = predTask.parentTask == null, a2 = task.parentTask == null;
- if(a1 && !a2 || !a1 && a2 || !a1 && !a2 && (predTask.parentTask.id != task.parentTask.id)){
- return false;
- }
- //check time
- var startTime = task.startTime.getTime(),
- pest = predTask.startTime.getTime(),
- pdur = predTask.duration * 24 * 60 * 60 * 1000 / predTaskObj.ganttChart.hsPerDay;
- if((pest+pdur) > startTime){
- return false;
- }
- // remove current connection
- this.clearPredTask();
- if(!this.ganttChart.checkPosPreviousTask(predTask, task)){
- this.ganttChart.correctPosPreviousTask(predTask, task, this);
- }
- task.previousTaskId = previousTaskId;
- task.previousTask = predTask;
- this.predTask = predTaskObj;
- predTaskObj.childPredTask.push(this);
- this.cTaskItem[1] = this.createConnectingLinesDS();
- }
- return true;
- },
- clearPredTask: function(){
- if(this.predTask){
- var ch = this.predTask.childPredTask;
- for(var i = 0; i < ch.length; i++){
- if(ch[i] == this){
- ch.splice(i, 1);
- break;
- }
- }
- for(var i = 0; i < this.cTaskItem[1].length; i++){
- this.cTaskItem[1][i].parentNode.removeChild(this.cTaskItem[1][i]);
- }
- this.cTaskItem[1] = [];
- this.taskItem.previousTaskId = null;
- this.taskItem.previousTask = null;
- this.predTask = null;
- }
- },
- setStartTime: function(startTime, shiftChild){
- this.moveChild = shiftChild;
- this.getMoveInfo();
- var pos = this.ganttChart.getPosOnDate(startTime);
- if((parseInt(this.cTaskItem[0].firstChild.firstChild.width) + pos > this.maxPosXMove) && (this.maxPosXMove != -1)){
- this.maxPosXMove = -1;
- this.minPosXMove = -1;
- return false;
- }
- if(pos < this.minPosXMove){
- this.maxPosXMove = -1;
- this.minPosXMove = -1;
- return false;
- }
- this.cTaskItem[0].style.left = pos;
- var width = pos - this.posX;
- this.moveCurrentTaskItem(width, shiftChild);
- this.project.shiftProjectItem();
- this.descrTask.innerHTML = this.objKeyToStr(this.getTaskOwner());
- this.adjustPanelTime();
- this.posX = 0;
- this.maxPosXMove = -1;
- this.minPosXMove = -1;
- return true;
- },
- setDuration: function(duration){
- this.getResizeInfo();
- var width = this.ganttChart.getWidthOnDuration(duration);
- if((width > this.maxWidthResize) && (this.maxWidthResize != -1)){
- return false;
- }else if(width < this.minWidthResize){
- return false;
- }else{
- this.taskItemWidth = parseInt(this.cTaskItem[0].firstChild.firstChild.width);
- this.resizeTaskItem(width);
- this.endResizeItem();
- this.descrTask.innerHTML = this.objKeyToStr(this.getTaskOwner());
- return true;
- }
- },
- setTaskOwner: function(owner){
- owner = (owner == null || owner == undefined) ? "" : owner;
- this.taskItem.taskOwner = owner;
- this.descrTask.innerHTML = this.objKeyToStr(this.getTaskOwner());
- return true;
- },
- setPercentCompleted: function(percentage){
- percentage = parseInt(percentage);
- if(isNaN(percentage) || percentage > 100 || percentage < 0){
- return false;
- }
- var trow = this.cTaskItem[0].childNodes[0].firstChild.rows[0],
- rc0 = trow.cells[0], rc1 = trow.cells[1];
- if((percentage != 0) && (percentage != 100)){
- if((this.taskItem.percentage != 0) && (this.taskItem.percentage != 100)){
- rc0.width = percentage + "%";
- rc1.width = 100 - percentage + "%";
- }else if((this.taskItem.percentage == 0) || (this.taskItem.percentage == 100)){
- rc0.parentNode.removeChild(rc0);
- var cellTblTask = dojo.create("td", {
- height: this.ganttChart.heightTaskItem + "px",
- width: percentage + "%"
- }, trow);
- cellTblTask.style.lineHeight = "1px";
- var imageProgressFill = dojo.create("div", {
- className: "ganttImageTaskProgressFilled"
- }, cellTblTask);
- dojo.style(imageProgressFill, {
- width: (percentage * this.taskItem.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
-
- cellTblTask = dojo.create("td", {
- height: this.ganttChart.heightTaskItem + "px",
- width: (100 - percentage) + "%"
- }, trow);
- cellTblTask.style.lineHeight = "1px";
- imageProgressFill = dojo.create("div", {
- className: "ganttImageTaskProgressBg"
- }, cellTblTask);
- dojo.style(imageProgressFill, {
- width: ((100 - percentage) * this.taskItem.duration * this.ganttChart.pixelsPerWorkHour) / 100 + "px",
- height: this.ganttChart.heightTaskItem + "px"
- });
- }
- }else if(percentage == 0){
- if((this.taskItem.percentage != 0) && (this.taskItem.percentage != 100)){
- rc0.parentNode.removeChild(rc0);
- rc1.width = 100 + "%";
- }else{
- dojo.removeClass(rc0.firstChild, "ganttImageTaskProgressFilled");
- dojo.addClass(rc0.firstChild, "ganttImageTaskProgressBg");
- }
- }else if(percentage == 100){
- if((this.taskItem.percentage != 0) && (this.taskItem.percentage != 100)){
- rc1.parentNode.removeChild(rc1);
- rc0.width = 100 + "%";
- }else{
- dojo.removeClass(rc0.firstChild, "ganttImageTaskProgressBg");
- dojo.addClass(rc0.firstChild, "ganttImageTaskProgressFilled");
- }
- }
- this.taskItem.percentage = percentage;
- this.taskItemWidth = parseInt(this.cTaskItem[0].firstChild.firstChild.width);
- this.resizeTaskItem(this.taskItemWidth);
- this.endResizeItem();
- this.descrTask.innerHTML = this.objKeyToStr(this.getTaskOwner());
- return true;
- },
- setName: function(name){
- if(name){
- this.taskItem.name = name;
- this.cTaskNameItem[0].innerHTML = name;
- this.cTaskNameItem[0].title = name;
- this.checkWidthTaskNameItem();
- this.checkPosition();
- this.descrTask.innerHTML = this.objKeyToStr(this.getTaskOwner());
- this.adjustPanelTime();
- }
- }
- });
- dojo.declare("dojox.gantt.GanttTaskItem", null, {
- constructor: function(configuration){
- //id is required
- this.id = configuration.id;
- this.name = configuration.name || this.id;
- this.startTime = configuration.startTime || new Date();
- this.duration = configuration.duration || 8;
- this.percentage = configuration.percentage || 0;
- this.previousTaskId = configuration.previousTaskId || "";
- this.taskOwner = configuration.taskOwner || "";
- this.cldTasks = [];
- this.cldPreTasks = [];
- this.parentTask = null;
- this.previousTask = null;
- this.project = null;
- this.nextChildTask = null;
- this.previousChildTask = null;
- this.nextParentTask = null;
- this.previousParentTask = null;
- },
- addChildTask: function(task){
- this.cldTasks.push(task);
- task.parentTask = this;
- },
- setProject: function(project){
- this.project = project;
- for(var j = 0; j < this.cldTasks.length; j++){
- this.cldTasks[j].setProject(project);
- }
- }
- });
- });
|