jsgantt-improved-prime
Version:
jsgantt-improved-prime
333 lines • 15.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var task_1 = require("./task");
var date_utils_1 = require("./utils/date_utils");
var draw_utils_1 = require("./utils/draw_utils");
var general_utils_1 = require("./utils/general_utils");
exports.parseXML = function (pFile, pGanttVar) {
return general_utils_1.makeRequest(pFile, false, false)
.then(function (xmlDoc) {
exports.AddXMLTask(pGanttVar, xmlDoc);
});
};
exports.parseXMLString = function (pStr, pGanttVar) {
var xmlDoc;
if (typeof window.DOMParser != 'undefined') {
xmlDoc = (new window.DOMParser()).parseFromString(pStr, 'text/xml');
}
else if (typeof window.ActiveXObject != 'undefined' &&
new window.ActiveXObject('Microsoft.XMLDOM')) {
xmlDoc = new window.ActiveXObject('Microsoft.XMLDOM');
xmlDoc.async = 'false';
xmlDoc.loadXML(pStr);
}
exports.AddXMLTask(pGanttVar, xmlDoc);
};
exports.findXMLNode = function (pRoot, pNodeName) {
var vRetValue;
try {
vRetValue = pRoot.getElementsByTagName(pNodeName);
}
catch (error) {
;
} // do nothing, we'll return undefined
return vRetValue;
};
// pType can be 1=numeric, 2=String, all other values just return raw data
exports.getXMLNodeValue = function (pRoot, pNodeName, pType, pDefault) {
var vRetValue;
try {
vRetValue = pRoot.getElementsByTagName(pNodeName)[0].childNodes[0].nodeValue;
}
catch (error) {
if (typeof pDefault != 'undefined')
vRetValue = pDefault;
}
if (typeof vRetValue != 'undefined' && vRetValue != null) {
if (pType == 1)
vRetValue *= 1;
else if (pType == 2)
vRetValue = vRetValue.toString();
}
return vRetValue;
};
exports.AddXMLTask = function (pGanttVar, pXmlDoc) {
var project = '';
var Task;
var n = 0;
var m = 0;
var i = 0;
var j = 0;
var k = 0;
var maxPID = 0;
var ass = new Array();
var assRes = new Array();
var res = new Array();
var pars = new Array();
var projNode = exports.findXMLNode(pXmlDoc, 'Project');
if (typeof projNode != 'undefined' && projNode.length > 0)
project = projNode[0].getAttribute('xmlns');
if (project == 'http://schemas.microsoft.com/project') {
pGanttVar.setDateInputFormat('yyyy-mm-dd');
Task = exports.findXMLNode(pXmlDoc, 'Task');
if (typeof Task == 'undefined')
n = 0;
else
n = Task.length;
var resources = exports.findXMLNode(pXmlDoc, 'Resource');
if (typeof resources == 'undefined') {
n = 0;
m = 0;
}
else
m = resources.length;
for (i = 0; i < m; i++) {
var resname = exports.getXMLNodeValue(resources[i], 'Name', 2, '');
var uid = exports.getXMLNodeValue(resources[i], 'UID', 1, -1);
if (resname.length > 0 && uid > 0)
res[uid] = resname;
}
var assignments = exports.findXMLNode(pXmlDoc, 'Assignment');
if (typeof assignments == 'undefined')
j = 0;
else
j = assignments.length;
for (i = 0; i < j; i++) {
var uid = void 0;
var resUID = exports.getXMLNodeValue(assignments[i], 'ResourceUID', 1, -1);
uid = exports.getXMLNodeValue(assignments[i], 'TaskUID', 1, -1);
if (uid > 0) {
if (resUID > 0)
assRes[uid] = res[resUID];
ass[uid] = assignments[i];
}
}
// Store information about parent UIDs in an easily searchable form
for (i = 0; i < n; i++) {
var uid = void 0;
uid = exports.getXMLNodeValue(Task[i], 'UID', 1, 0);
var vOutlineNumber = void 0;
if (uid != 0)
vOutlineNumber = exports.getXMLNodeValue(Task[i], 'OutlineNumber', 2, '0');
if (uid > 0)
pars[vOutlineNumber] = uid;
if (uid > maxPID)
maxPID = uid;
}
for (i = 0; i < n; i++) {
// optional parameters may not have an entry
// Task ID must NOT be zero otherwise it will be skipped
var pID = exports.getXMLNodeValue(Task[i], 'UID', 1, 0);
if (pID != 0) {
var pName = exports.getXMLNodeValue(Task[i], 'Name', 2, 'No Task Name');
var pStart = exports.getXMLNodeValue(Task[i], 'Start', 2, '');
var pEnd = exports.getXMLNodeValue(Task[i], 'Finish', 2, '');
var pPlanStart = exports.getXMLNodeValue(Task[i], 'PlanStart', 2, '');
var pPlanEnd = exports.getXMLNodeValue(Task[i], 'PlanFinish', 2, '');
var pDuration = exports.getXMLNodeValue(Task[i], 'Duration', 2, '');
var pLink = exports.getXMLNodeValue(Task[i], 'HyperlinkAddress', 2, '');
var pMile = exports.getXMLNodeValue(Task[i], 'Milestone', 1, 0);
var pComp = exports.getXMLNodeValue(Task[i], 'PercentWorkComplete', 1, 0);
var pCost = exports.getXMLNodeValue(Task[i], 'Cost', 2, 0);
var pGroup = exports.getXMLNodeValue(Task[i], 'Summary', 1, 0);
var pParent = 0;
var vOutlineLevel = exports.getXMLNodeValue(Task[i], 'OutlineLevel', 1, 0);
var vOutlineNumber = void 0;
if (vOutlineLevel > 1) {
vOutlineNumber = exports.getXMLNodeValue(Task[i], 'OutlineNumber', 2, '0');
pParent = pars[vOutlineNumber.substr(0, vOutlineNumber.lastIndexOf('.'))];
}
var pNotes = void 0;
try {
pNotes = Task[i].getElementsByTagName('Notes')[0].childNodes[1].nodeValue; //this should be a CDATA node
}
catch (error) {
pNotes = '';
}
var pRes = void 0;
if (typeof assRes[pID] != 'undefined')
pRes = assRes[pID];
else
pRes = '';
var predecessors = exports.findXMLNode(Task[i], 'PredecessorLink');
if (typeof predecessors == 'undefined')
j = 0;
else
j = predecessors.length;
var pDepend = '';
for (k = 0; k < j; k++) {
var depUID = exports.getXMLNodeValue(predecessors[k], 'PredecessorUID', 1, -1);
var depType = exports.getXMLNodeValue(predecessors[k], 'Type', 1, 1);
if (depUID > 0) {
if (pDepend.length > 0)
pDepend += ',';
switch (depType) {
case 0:
pDepend += depUID + 'FF';
break;
case 1:
pDepend += depUID + 'FS';
break;
case 2:
pDepend += depUID + 'SF';
break;
case 3:
pDepend += depUID + 'SS';
break;
default:
pDepend += depUID + 'FS';
break;
}
}
}
var pOpen = 1;
var pCaption = '';
var pClass = void 0;
if (pGroup > 0)
pClass = 'ggroupblack';
else if (pMile > 0)
pClass = 'gmilestone';
else
pClass = 'gtaskblue';
// check for split tasks
var splits = exports.findXMLNode(ass[pID], 'TimephasedData');
if (typeof splits == 'undefined')
j = 0;
else
j = splits.length;
var vSplitStart = pStart;
var vSplitEnd = pEnd;
var vSubCreated = false;
var vDepend = pDepend.replace(/,*[0-9]+[FS]F/g, '');
for (k = 0; k < j; k++) {
var vDuration = exports.getXMLNodeValue(splits[k], 'Value', 2, '0');
//remove all text
vDuration = '0' + vDuration.replace(/\D/g, '');
vDuration *= 1;
if ((vDuration == 0 && !vSubCreated) || (k + 1 == j && pGroup == 2)) {
// No time booked in the given period (or last entry)
// Make sure the parent task is set as a combined group
pGroup = 2;
// Handle last loop
if (k + 1 == j)
vDepend = pDepend.replace(/,*[0-9]+[FS]S/g, '');
// Now create a subtask
maxPID++;
vSplitEnd = exports.getXMLNodeValue(splits[k], (k + 1 == j) ? 'Finish' : 'Start', 2, '');
pGanttVar.AddTaskItem(new task_1.TaskItem(maxPID, pName, vSplitStart, vSplitEnd, 'gtaskblue', pLink, pMile, pRes, pComp, 0, pID, pOpen, vDepend, pCaption, pNotes, pGanttVar, pCost, pPlanStart, pPlanEnd, pDuration));
vSubCreated = true;
vDepend = '';
}
else if (vDuration != 0 && vSubCreated) {
vSplitStart = exports.getXMLNodeValue(splits[k], 'Start', 2, '');
vSubCreated = false;
}
}
if (vSubCreated)
pDepend = '';
// Finally add the task
pGanttVar.AddTaskItem(new task_1.TaskItem(pID, pName, pStart, pEnd, pClass, pLink, pMile, pRes, pComp, pGroup, pParent, pOpen, pDepend, pCaption, pNotes, pGanttVar, pCost, pPlanStart, pPlanEnd, pDuration));
}
}
}
else {
Task = pXmlDoc.getElementsByTagName('task');
n = Task.length;
for (i = 0; i < n; i++) {
// optional parameters may not have an entry
// Task ID must NOT be zero otherwise it will be skipped
var pID = exports.getXMLNodeValue(Task[i], 'pID', 1, 0);
if (pID != 0) {
var pName = exports.getXMLNodeValue(Task[i], 'pName', 2, 'No Task Name');
var pStart = exports.getXMLNodeValue(Task[i], 'pStart', 2, '');
var pEnd = exports.getXMLNodeValue(Task[i], 'pEnd', 2, '');
var pPlanStart = exports.getXMLNodeValue(Task[i], 'pPlanStart', 2, '');
var pPlanEnd = exports.getXMLNodeValue(Task[i], 'pPlanEnd', 2, '');
var pDuration = exports.getXMLNodeValue(Task[i], 'pDuration', 2, '');
var pLink = exports.getXMLNodeValue(Task[i], 'pLink', 2, '');
var pMile = exports.getXMLNodeValue(Task[i], 'pMile', 1, 0);
var pComp = exports.getXMLNodeValue(Task[i], 'pComp', 1, 0);
var pCost = exports.getXMLNodeValue(Task[i], 'pCost', 2, 0);
var pGroup = exports.getXMLNodeValue(Task[i], 'pGroup', 1, 0);
var pParent = exports.getXMLNodeValue(Task[i], 'pParent', 1, 0);
var pRes = exports.getXMLNodeValue(Task[i], 'pRes', 2, '');
var pOpen = exports.getXMLNodeValue(Task[i], 'pOpen', 1, 1);
var pDepend = exports.getXMLNodeValue(Task[i], 'pDepend', 2, '');
var pCaption = exports.getXMLNodeValue(Task[i], 'pCaption', 2, '');
var pNotes = exports.getXMLNodeValue(Task[i], 'pNotes', 2, '');
var pClass = exports.getXMLNodeValue(Task[i], 'pClass', 2, '');
if (typeof pClass == 'undefined') {
if (pGroup > 0)
pClass = 'ggroupblack';
else if (pMile > 0)
pClass = 'gmilestone';
else
pClass = 'gtaskblue';
}
// Finally add the task
pGanttVar.AddTaskItem(new task_1.TaskItem(pID, pName, pStart, pEnd, pClass, pLink, pMile, pRes, pComp, pGroup, pParent, pOpen, pDepend, pCaption, pNotes, pGanttVar, pCost, pPlanStart, pPlanEnd, pDuration));
}
}
}
};
exports.getXMLProject = function () {
var vProject = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">';
for (var i = 0; i < this.vTaskList.length; i++) {
vProject += this.getXMLTask(i, true);
}
vProject += '</project>';
return vProject;
};
exports.getXMLTask = function (pID, pIdx) {
var i = 0;
var vIdx = -1;
var vTask = '';
var vOutFrmt = date_utils_1.parseDateFormatStr(this.getDateInputFormat() + ' HH:MI');
if (pIdx === true)
vIdx = pID;
else {
for (i = 0; i < this.vTaskList.length; i++) {
if (this.vTaskList[i].getID() == pID) {
vIdx = i;
break;
}
}
}
if (vIdx >= 0 && vIdx < this.vTaskList.length) {
/* Simplest way to return case sensitive node names is to just build a string */
vTask = '<task>';
vTask += '<pID>' + this.vTaskList[vIdx].getID() + '</pID>';
vTask += '<pName>' + this.vTaskList[vIdx].getName() + '</pName>';
vTask += '<pStart>' + date_utils_1.formatDateStr(this.vTaskList[vIdx].getStart(), vOutFrmt, this.vLangs[this.vLang]) + '</pStart>';
vTask += '<pEnd>' + date_utils_1.formatDateStr(this.vTaskList[vIdx].getEnd(), vOutFrmt, this.vLangs[this.vLang]) + '</pEnd>';
vTask += '<pPlanStart>' + date_utils_1.formatDateStr(this.vTaskList[vIdx].getPlanStart(), vOutFrmt, this.vLangs[this.vLang]) + '</pPlanStart>';
vTask += '<pPlanEnd>' + date_utils_1.formatDateStr(this.vTaskList[vIdx].getPlanEnd(), vOutFrmt, this.vLangs[this.vLang]) + '</pPlanEnd>';
vTask += '<pDuration>' + this.vTaskList[vIdx].getDuration() + '</pDuration>';
vTask += '<pClass>' + this.vTaskList[vIdx].getClass() + '</pClass>';
vTask += '<pLink>' + this.vTaskList[vIdx].getLink() + '</pLink>';
vTask += '<pMile>' + this.vTaskList[vIdx].getMile() + '</pMile>';
if (this.vTaskList[vIdx].getResource() != '\u00A0')
vTask += '<pRes>' + this.vTaskList[vIdx].getResource() + '</pRes>';
vTask += '<pComp>' + this.vTaskList[vIdx].getCompVal() + '</pComp>';
vTask += '<pCost>' + this.vTaskList[vIdx].getCost() + '</pCost>';
vTask += '<pGroup>' + this.vTaskList[vIdx].getGroup() + '</pGroup>';
vTask += '<pParent>' + this.vTaskList[vIdx].getParent() + '</pParent>';
vTask += '<pOpen>' + this.vTaskList[vIdx].getOpen() + '</pOpen>';
vTask += '<pDepend>';
var vDepList = this.vTaskList[vIdx].getDepend();
for (i = 0; i < vDepList.length; i++) {
if (i > 0)
vTask += ',';
if (vDepList[i] > 0)
vTask += vDepList[i] + this.vTaskList[vIdx].getDepType()[i];
}
vTask += '</pDepend>';
vTask += '<pCaption>' + this.vTaskList[vIdx].getCaption() + '</pCaption>';
var vTmpFrag = document.createDocumentFragment();
var vTmpDiv = draw_utils_1.newNode(vTmpFrag, 'div', null, null, this.vTaskList[vIdx].getNotes().innerHTML);
vTask += '<pNotes>' + vTmpDiv.innerHTML + '</pNotes>';
vTask += '</task>';
}
return vTask;
};
//# sourceMappingURL=xml.js.map