UNPKG

jsgantt-improved-prime

Version:
333 lines 15.8 kB
"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