jsgantt-improved-prime
Version:
jsgantt-improved-prime
370 lines • 15.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var general_utils_1 = require("./utils/general_utils");
// Function to open/close and hide/show children of specified task
exports.folder = function (pID, ganttObj) {
var vList = ganttObj.getList();
ganttObj.clearDependencies(); // clear these first so slow rendering doesn't look odd
for (var i = 0; i < vList.length; i++) {
if (vList[i].getID() == pID) {
if (vList[i].getOpen() == 1) {
vList[i].setOpen(0);
exports.hide(pID, ganttObj);
if (general_utils_1.isIE())
vList[i].getGroupSpan().innerText = '+';
else
vList[i].getGroupSpan().textContent = '+';
}
else {
vList[i].setOpen(1);
exports.show(pID, 1, ganttObj);
if (general_utils_1.isIE())
vList[i].getGroupSpan().innerText = '-';
else
vList[i].getGroupSpan().textContent = '-';
}
}
}
var bd;
if (this.vDebug) {
bd = new Date();
console.log('after drawDependency', bd);
}
ganttObj.DrawDependencies(this.vDebug);
if (this.vDebug) {
var ad = new Date();
console.log('after drawDependency', ad, (ad.getTime() - bd.getTime()));
}
};
exports.hide = function (pID, ganttObj) {
var vList = ganttObj.getList();
var vID = 0;
for (var i = 0; i < vList.length; i++) {
if (vList[i].getParent() == pID) {
vID = vList[i].getID();
// it's unlikely but if the task list has been updated since
// the chart was drawn some of the rows may not exist
if (vList[i].getListChildRow())
vList[i].getListChildRow().style.display = 'none';
if (vList[i].getChildRow())
vList[i].getChildRow().style.display = 'none';
vList[i].setVisible(0);
if (vList[i].getGroup())
exports.hide(vID, ganttObj);
}
}
};
// Function to show children of specified task
exports.show = function (pID, pTop, ganttObj) {
var vList = ganttObj.getList();
var vID = 0;
var vState = '';
for (var i = 0; i < vList.length; i++) {
if (vList[i].getParent() == pID) {
if (!vList[i].getParItem()) {
console.error("Cant find parent on who event (maybe problems with Task ID and Parent Id mixes?)");
}
if (vList[i].getParItem().getGroupSpan()) {
if (general_utils_1.isIE())
vState = vList[i].getParItem().getGroupSpan().innerText;
else
vState = vList[i].getParItem().getGroupSpan().textContent;
}
i = vList.length;
}
}
for (var i = 0; i < vList.length; i++) {
if (vList[i].getParent() == pID) {
var vChgState = false;
vID = vList[i].getID();
if (pTop == 1 && vState == '+')
vChgState = true;
else if (vState == '-')
vChgState = true;
else if (vList[i].getParItem() && vList[i].getParItem().getGroup() == 2)
vList[i].setVisible(1);
if (vChgState) {
if (vList[i].getListChildRow())
vList[i].getListChildRow().style.display = '';
if (vList[i].getChildRow())
vList[i].getChildRow().style.display = '';
vList[i].setVisible(1);
}
if (vList[i].getGroup())
exports.show(vID, 0, ganttObj);
}
}
};
exports.mouseOver = function (pObj1, pObj2) {
if (this.getUseRowHlt()) {
pObj1.className += ' gitemhighlight';
pObj2.className += ' gitemhighlight';
}
};
exports.mouseOut = function (pObj1, pObj2) {
if (this.getUseRowHlt()) {
pObj1.className = pObj1.className.replace(/(?:^|\s)gitemhighlight(?!\S)/g, '');
pObj2.className = pObj2.className.replace(/(?:^|\s)gitemhighlight(?!\S)/g, '');
}
};
exports.showToolTip = function (pGanttChartObj, e, pContents, pWidth, pTimer) {
var vTtDivId = pGanttChartObj.getDivId() + 'JSGanttToolTip';
var vMaxW = 500;
var vMaxAlpha = 100;
var vShowing = pContents.id;
if (pGanttChartObj.getUseToolTip()) {
if (pGanttChartObj.vTool == null) {
pGanttChartObj.vTool = document.createElement('div');
pGanttChartObj.vTool.id = vTtDivId;
pGanttChartObj.vTool.className = 'JSGanttToolTip';
pGanttChartObj.vTool.vToolCont = document.createElement('div');
pGanttChartObj.vTool.vToolCont.id = vTtDivId + 'cont';
pGanttChartObj.vTool.vToolCont.className = 'JSGanttToolTipcont';
pGanttChartObj.vTool.vToolCont.setAttribute('showing', '');
pGanttChartObj.vTool.appendChild(pGanttChartObj.vTool.vToolCont);
document.body.appendChild(pGanttChartObj.vTool);
pGanttChartObj.vTool.style.opacity = 0;
pGanttChartObj.vTool.setAttribute('currentOpacity', 0);
pGanttChartObj.vTool.setAttribute('fadeIncrement', 10);
pGanttChartObj.vTool.setAttribute('moveSpeed', 10);
pGanttChartObj.vTool.style.filter = 'alpha(opacity=0)';
pGanttChartObj.vTool.style.visibility = 'hidden';
pGanttChartObj.vTool.style.left = Math.floor(((e) ? e.clientX : window.event.clientX) / 2) + 'px';
pGanttChartObj.vTool.style.top = Math.floor(((e) ? e.clientY : window.event.clientY) / 2) + 'px';
this.addListener('mouseover', function () { clearTimeout(pGanttChartObj.vTool.delayTimeout); }, pGanttChartObj.vTool);
this.addListener('mouseout', function () { general_utils_1.delayedHide(pGanttChartObj, pGanttChartObj.vTool, pTimer); }, pGanttChartObj.vTool);
}
clearTimeout(pGanttChartObj.vTool.delayTimeout);
var newHTML = pContents.innerHTML;
if (pGanttChartObj.vTool.vToolCont.getAttribute("content") !== newHTML) {
pGanttChartObj.vTool.vToolCont.innerHTML = pContents.innerHTML;
// as we are allowing arbitrary HTML we should remove any tag ids to prevent duplication
general_utils_1.stripIds(pGanttChartObj.vTool.vToolCont);
pGanttChartObj.vTool.vToolCont.setAttribute("content", newHTML);
}
if (pGanttChartObj.vTool.vToolCont.getAttribute('showing') != vShowing || pGanttChartObj.vTool.style.visibility != 'visible') {
if (pGanttChartObj.vTool.vToolCont.getAttribute('showing') != vShowing) {
pGanttChartObj.vTool.vToolCont.setAttribute('showing', vShowing);
}
pGanttChartObj.vTool.style.visibility = 'visible';
// Rather than follow the mouse just have it stay put
general_utils_1.updateFlyingObj(e, pGanttChartObj, pTimer);
pGanttChartObj.vTool.style.width = (pWidth) ? pWidth + 'px' : 'auto';
if (!pWidth && general_utils_1.isIE()) {
pGanttChartObj.vTool.style.width = pGanttChartObj.vTool.offsetWidth;
}
if (pGanttChartObj.vTool.offsetWidth > vMaxW) {
pGanttChartObj.vTool.style.width = vMaxW + 'px';
}
}
if (pGanttChartObj.getUseFade()) {
clearInterval(pGanttChartObj.vTool.fadeInterval);
pGanttChartObj.vTool.fadeInterval = setInterval(function () { general_utils_1.fadeToolTip(1, pGanttChartObj.vTool, vMaxAlpha); }, pTimer);
}
else {
pGanttChartObj.vTool.style.opacity = vMaxAlpha * 0.01;
pGanttChartObj.vTool.style.filter = 'alpha(opacity=' + vMaxAlpha + ')';
}
}
};
exports.addListener = function (eventName, handler, control) {
// Check if control is a string
if (control === String(control))
control = general_utils_1.findObj(control);
if (control.addEventListener) //Standard W3C
{
return control.addEventListener(eventName, handler, false);
}
else if (control.attachEvent) //IExplore
{
return control.attachEvent('on' + eventName, handler);
}
else {
return false;
}
};
exports.removeListener = function (eventName, handler, control) {
// Check if control is a string
if (control === String(control))
control = general_utils_1.findObj(control);
if (control.removeEventListener) {
//Standard W3C
return control.removeEventListener(eventName, handler, false);
}
else if (control.detachEvent) {
//IExplore
return control.attachEvent('on' + eventName, handler);
}
else {
return false;
}
};
exports.syncScroll = function (elements, attrName) {
var syncFlags = new Map(elements.map(function (e) { return [e, false]; }));
function scrollEvent(e) {
if (!syncFlags.get(e.target)) {
for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {
var el = elements_2[_i];
if (el !== e.target) {
syncFlags.set(el, true);
el[attrName] = e.target[attrName];
}
}
}
syncFlags.set(e.target, false);
}
for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
var el = elements_1[_i];
el.addEventListener('scroll', scrollEvent);
}
};
exports.addTooltipListeners = function (pGanttChart, pObj1, pObj2, callback) {
var isShowingTooltip = false;
exports.addListener('mouseover', function (e) {
if (isShowingTooltip || !callback) {
exports.showToolTip(pGanttChart, e, pObj2, null, pGanttChart.getTimer());
}
else if (callback) {
isShowingTooltip = true;
var promise = callback();
exports.showToolTip(pGanttChart, e, pObj2, null, pGanttChart.getTimer());
if (promise && promise.then) {
promise.then(function () {
if (pGanttChart.vTool.vToolCont.getAttribute('showing') === pObj2.id &&
pGanttChart.vTool.style.visibility === 'visible') {
exports.showToolTip(pGanttChart, e, pObj2, null, pGanttChart.getTimer());
}
});
}
}
}, pObj1);
exports.addListener('mouseout', function (e) {
var outTo = e.relatedTarget;
if (general_utils_1.isParentElementOrSelf(outTo, pObj1) || (pGanttChart.vTool && general_utils_1.isParentElementOrSelf(outTo, pGanttChart.vTool))) {
// not actually out
}
else {
isShowingTooltip = false;
}
general_utils_1.delayedHide(pGanttChart, pGanttChart.vTool, pGanttChart.getTimer());
}, pObj1);
};
exports.addThisRowListeners = function (pGanttChart, pObj1, pObj2) {
exports.addListener('mouseover', function () { pGanttChart.mouseOver(pObj1, pObj2); }, pObj1);
exports.addListener('mouseover', function () { pGanttChart.mouseOver(pObj1, pObj2); }, pObj2);
exports.addListener('mouseout', function () { pGanttChart.mouseOut(pObj1, pObj2); }, pObj1);
exports.addListener('mouseout', function () { pGanttChart.mouseOut(pObj1, pObj2); }, pObj2);
};
exports.updateGridHeaderWidth = function (pGanttChart) {
var head = pGanttChart.getChartHead();
var body = pGanttChart.getChartBody();
if (!head || !body)
return;
var isScrollVisible = body.scrollHeight > body.clientHeight;
if (isScrollVisible) {
head.style.width = "calc(100% - " + general_utils_1.getScrollbarWidth() + "px)";
}
else {
head.style.width = '100%';
}
};
exports.addFolderListeners = function (pGanttChart, pObj, pID) {
exports.addListener('click', function () {
exports.folder(pID, pGanttChart);
exports.updateGridHeaderWidth(pGanttChart);
}, pObj);
};
exports.addFormatListeners = function (pGanttChart, pFormat, pObj) {
exports.addListener('click', function () { general_utils_1.changeFormat(pFormat, pGanttChart); }, pObj);
};
exports.addScrollListeners = function (pGanttChart) {
exports.addListener('resize', function () { pGanttChart.getChartHead().scrollLeft = pGanttChart.getChartBody().scrollLeft; }, window);
exports.addListener('resize', function () {
pGanttChart.getListBody().scrollTop = pGanttChart.getChartBody().scrollTop;
}, window);
};
exports.addListenerClickCell = function (vTmpCell, vEvents, task, column) {
exports.addListener('click', function (e) {
if (e.target.classList.contains('gfoldercollapse') === false &&
vEvents[column] && typeof vEvents[column] === 'function') {
vEvents[column](task, e, vTmpCell);
}
}, vTmpCell);
};
exports.addListenerInputCell = function (vTmpCell, vEventsChange, callback, task, column, draw, event) {
if (draw === void 0) { draw = null; }
if (event === void 0) { event = 'blur'; }
if (vTmpCell.children[0] && vTmpCell.children[0].children && vTmpCell.children[0].children[0]) {
var tagName = vTmpCell.children[0].children[0].tagName;
var selectInputOrButton = tagName === 'SELECT' || tagName === 'INPUT' || tagName === 'BUTTON';
if (selectInputOrButton) {
exports.addListener(event, function (e) {
if (callback) {
callback(task, e);
}
if (vEventsChange[column] && typeof vEventsChange[column] === 'function') {
var q = vEventsChange[column](task, e, vTmpCell, vColumnsNames[column]);
if (q && q.then) {
q.then(function (e) { return draw(); });
}
else {
draw();
}
}
else {
draw();
}
}, vTmpCell.children[0].children[0]);
}
}
};
exports.addListenerDependencies = function (vLineOptions) {
var elements = document.querySelectorAll('.gtaskbarcontainer');
for (var i = 0; i < elements.length; i++) {
var taskDiv = elements[i];
taskDiv.addEventListener('mouseover', function (e) {
toggleDependencies(e, vLineOptions);
});
taskDiv.addEventListener('mouseout', function (e) {
toggleDependencies(e, vLineOptions);
});
}
};
var toggleDependencies = function (e, vLineOptions) {
var target = e.currentTarget;
var ids = target.getAttribute('id').split('_');
var style = vLineOptions && vLineOptions.borderStyleHover !== undefined ? vLineOptions.hoverStyle : 'groove';
if (e.type === 'mouseout') {
style = '';
}
if (ids.length > 1) {
var frameZones = Array.from(document.querySelectorAll(".gDepId" + ids[1]));
frameZones.forEach(function (c) {
c.style.borderStyle = style;
});
// document.querySelectorAll(`.gDepId${ids[1]}`).forEach((c: any) => {
// c.style.borderStyle = style;
// });
}
};
// "pID": 122
var vColumnsNames = {
taskname: 'pName',
res: 'pRes',
dur: '',
comp: 'pComp',
start: 'pStart',
end: 'pEnd',
planstart: 'pPlanStart',
planend: 'pPlanEnd',
link: 'pLink',
cost: 'pCost',
mile: 'pMile',
group: 'pGroup',
parent: 'pParent',
open: 'pOpen',
depend: 'pDepend',
caption: 'pCaption',
note: 'pNotes'
};
//# sourceMappingURL=events.js.map