Skip to content

Commit babe687

Browse files
committed
[update] version 9.0.10
1 parent b757286 commit babe687

18 files changed

+184
-69
lines changed

README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# dhtmlxGantt #
22

33
[![dhtmlx.com](https://img.shields.io/badge/made%20by-DHTMLX-blue)](https://dhtmlx.com/)
4-
[![npm: v.9.0.9](https://img.shields.io/badge/npm-v.9.0.9-blue.svg)](https://www.npmjs.com/package/dhtmlx-gantt)
4+
[![npm: v.9.0.10](https://img.shields.io/badge/npm-v.9.0.10-blue.svg)](https://www.npmjs.com/package/dhtmlx-gantt)
55
[![License: GPL v2](https://img.shields.io/badge/license-GPL%20v2-blue.svg)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
66

77
[Getting started](#getting-started) | [Features](#features) | [License](#license) | [Useful links](#links) | [Follow us](#followus)
@@ -117,7 +117,7 @@ Resource management, critical path calculation, auto scheduling, and other enhan
117117
<a name="license"></a>
118118
## License ##
119119

120-
dhtmlxGantt v.9.0.9 Standard
120+
dhtmlxGantt v.9.0.10 Standard
121121

122122
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
123123

bower.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gantt",
3-
"version": "9.0.9",
3+
"version": "9.0.10",
44
"homepage": "https://dhtmlx.com/docs/products/dhtmlxGantt/",
55
"description": "An open source JavaScript Gantt chart that helps you illustrate a project schedule in a nice-looking chart.",
66
"main": [

codebase/dhtmlxgantt.css

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codebase/dhtmlxgantt.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Type definitions for dhtmlxGantt 9.0.9
1+
// Type definitions for dhtmlxGantt 9.0.10
22
// Project: https://dhtmlx.com/docs/products/dhtmlxGantt
33

44
type GanttCallback = (...args: any[]) => any;

codebase/dhtmlxgantt.es.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Type definitions for dhtmlxGantt 9.0.9
1+
// Type definitions for dhtmlxGantt 9.0.10
22
// Project: https://dhtmlx.com/docs/products/dhtmlxGantt
33

44
type GanttCallback = (...args: any[]) => any;

codebase/dhtmlxgantt.es.js

+37-17
Large diffs are not rendered by default.

codebase/dhtmlxgantt.es.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codebase/dhtmlxgantt.js

+7-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codebase/dhtmlxgantt.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codebase/sources/dhtmlxgantt.css

+2-1
Original file line numberDiff line numberDiff line change
@@ -1697,7 +1697,8 @@ div.dhx_modal_cover {
16971697
cursor: w-resize;
16981698
}
16991699
.gantt_task_drag {
1700-
height: 16px;
1700+
min-height: 16px;
1701+
height: 50%;
17011702
width: 8px;
17021703
z-index: 1;
17031704
top: -1px;

codebase/sources/dhtmlxgantt.es.js

+53-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/** @license
22

3-
dhtmlxGantt v.9.0.9 Standard
3+
dhtmlxGantt v.9.0.10 Standard
44

55
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
66

@@ -7334,13 +7334,13 @@ const storeRenderCreator = function(name, gantt2) {
73347334
}
73357335
});
73367336
store.attachEvent("onItemOpen", function() {
7337-
if (isHeadless(gantt2)) {
7337+
if (isHeadless(gantt2) || store.isSilent()) {
73387338
return true;
73397339
}
73407340
gantt2.render();
73417341
});
73427342
store.attachEvent("onItemClose", function() {
7343-
if (isHeadless(gantt2)) {
7343+
if (isHeadless(gantt2) || store.isSilent()) {
73447344
return true;
73457345
}
73467346
gantt2.render();
@@ -11192,7 +11192,7 @@ function baselines(gantt2) {
1119211192
}
1119311193
switch (gantt2.config.baselines.render_mode) {
1119411194
case "taskRow":
11195-
task.row_height = task.bar_height + 4;
11195+
task.row_height = task.bar_height + 8;
1119611196
break;
1119711197
case "separateRow":
1119811198
height = timelineView.getBarHeight(task.id);
@@ -11220,6 +11220,10 @@ function baselines(gantt2) {
1122011220
task.row_height = task.bar_height + 4;
1122111221
}
1122211222
_increaseSplitParentHeight(task);
11223+
break;
11224+
default:
11225+
task.row_height = task.bar_height + 8;
11226+
break;
1122311227
}
1122411228
};
1122511229
function _increaseSplitParentHeight(task) {
@@ -14539,7 +14543,7 @@ function i18nFactory() {
1453914543
}
1454014544
function DHXGantt() {
1454114545
this.constants = constants;
14542-
this.version = "9.0.9";
14546+
this.version = "9.0.10";
1454314547
this.license = "gpl";
1454414548
this.templates = {};
1454514549
this.ext = {};
@@ -17193,10 +17197,19 @@ var ScrollbarCell = function(_super) {
1719317197
var deltaY = ff ? e.deltaY : e.wheelDelta;
1719417198
var multiplier = -20;
1719517199
if (ff) {
17196-
if (e.deltaMode !== 0) {
17197-
multiplier = -40;
17200+
const version = parseInt(navigator.userAgent.split("Firefox/")[1]);
17201+
if (version <= 87) {
17202+
if (e.deltaMode !== 0) {
17203+
multiplier = -40;
17204+
} else {
17205+
multiplier = -10;
17206+
}
17207+
} else if (version <= 90) {
17208+
multiplier = -3;
17209+
} else if (version <= 96) {
17210+
multiplier = -1.5;
1719817211
} else {
17199-
multiplier = -10;
17212+
multiplier = -1;
1720017213
}
1720117214
}
1720217215
var wx = ff ? deltaX * multiplier * wheelSpeed.x : deltaX * 2 * wheelSpeed.x;
@@ -19964,7 +19977,7 @@ function createTaskRenderer$2(gantt2) {
1996419977
}
1996519978
function _render_task_progress(task, element, maxWidth, cfg, templates2) {
1996619979
var done = task.progress * 1 || 0;
19967-
maxWidth = Math.max(maxWidth - 2, 0);
19980+
maxWidth = Math.max(maxWidth, 0);
1996819981
var pr = document.createElement("div");
1996919982
var width = Math.round(maxWidth * done);
1997019983
width = Math.min(maxWidth, width);
@@ -21985,6 +21998,9 @@ function createTaskDND(timeline, gantt2) {
2198521998
for (var i in dragItems) {
2198621999
var drag = dragItems[i];
2198722000
var task = gantt2.getTask(drag.id);
22001+
if (task.unscheduled) {
22002+
continue;
22003+
}
2198822004
var coords_x = this._drag_task_coords(task, drag);
2198922005
var minX = gantt2.posFromDate(new Date(gantt2.getState().min_date));
2199022006
var maxX = gantt2.posFromDate(new Date(gantt2.getState().max_date));
@@ -22207,6 +22223,31 @@ function createTaskDND(timeline, gantt2) {
2220722223
gantt2.mixin(task, drag.obj, true);
2220822224
}
2220922225
gantt2.refreshTask(task.id);
22226+
if (task.$level > 100) {
22227+
let shouldRepaint = false;
22228+
gantt2.eachParent(function(parent) {
22229+
if (!shouldRepaint && parent.type === gantt2.config.types.project) {
22230+
const initialDates = { start_date: parent.start_date, end_date: parent.end_date };
22231+
gantt2.resetProjectDates(parent);
22232+
if (+initialDates.start_date !== +parent.start_date || +initialDates.end_date !== +parent.end_date) {
22233+
shouldRepaint = true;
22234+
}
22235+
}
22236+
}, task.id);
22237+
if (shouldRepaint) {
22238+
gantt2.refreshData();
22239+
}
22240+
} else {
22241+
gantt2.eachParent(function(parent) {
22242+
if (parent.type === gantt2.config.types.project) {
22243+
const initialDates = { start_date: parent.start_date, end_date: parent.end_date };
22244+
gantt2.resetProjectDates(parent);
22245+
if (+initialDates.start_date !== +parent.start_date || +initialDates.end_date !== +parent.end_date) {
22246+
gantt2.refreshTask(parent.id);
22247+
}
22248+
}
22249+
}, task.id);
22250+
}
2221022251
} else {
2221122252
var drag_id = taskId;
2221222253
gantt2._init_task_timing(task);
@@ -24550,6 +24591,9 @@ function ParentControlConstructor(gantt2) {
2455024591
};
2455124592
ParentControl.prototype.set_value = function(node, value, ev, config2) {
2455224593
if (value === 0) value = "0";
24594+
if (!ev.id && gantt2.getState().lightbox) {
24595+
ev.id = gantt2.getLightboxValues().id;
24596+
}
2455324597
var tmpDom = document.createElement("div");
2455424598
tmpDom.innerHTML = _display(config2, ev.id);
2455524599
var newOptions = tmpDom.removeChild(tmpDom.firstChild);
@@ -25705,9 +25749,6 @@ function wai_aria(gantt2) {
2570525749
var content = gantt2.locale.labels.link + " " + gantt2.templates.drag_link(link.source, fromStart, link.target, toStart);
2570625750
div.setAttribute("role", "img");
2570725751
div.setAttribute("aria-label", stripHTMLLite(content));
25708-
if (gantt2.isReadonly(link)) {
25709-
div.setAttribute("aria-readonly", true);
25710-
}
2571125752
}, gridSeparatorAttr: function(div) {
2571225753
div.setAttribute("role", "columnheader");
2571325754
}, rowResizerAttr: function(div) {

codebase/sources/dhtmlxgantt.es.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codebase/sources/dhtmlxgantt.js

+53-12
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
})(this, function(exports2) {
44
"use strict";/** @license
55

6-
dhtmlxGantt v.9.0.9 Standard
6+
dhtmlxGantt v.9.0.10 Standard
77

88
This version of dhtmlxGantt is distributed under GPL 2.0 license and can be legally used in GPL projects.
99

@@ -7338,13 +7338,13 @@ To use dhtmlxGantt in non-GPL projects (and get Pro version of the product), ple
73387338
}
73397339
});
73407340
store.attachEvent("onItemOpen", function() {
7341-
if (isHeadless(gantt2)) {
7341+
if (isHeadless(gantt2) || store.isSilent()) {
73427342
return true;
73437343
}
73447344
gantt2.render();
73457345
});
73467346
store.attachEvent("onItemClose", function() {
7347-
if (isHeadless(gantt2)) {
7347+
if (isHeadless(gantt2) || store.isSilent()) {
73487348
return true;
73497349
}
73507350
gantt2.render();
@@ -11196,7 +11196,7 @@ See https://docs.dhtmlx.com/gantt/desktop__server_side.html#customrouting and ht
1119611196
}
1119711197
switch (gantt2.config.baselines.render_mode) {
1119811198
case "taskRow":
11199-
task.row_height = task.bar_height + 4;
11199+
task.row_height = task.bar_height + 8;
1120011200
break;
1120111201
case "separateRow":
1120211202
height = timelineView.getBarHeight(task.id);
@@ -11224,6 +11224,10 @@ See https://docs.dhtmlx.com/gantt/desktop__server_side.html#customrouting and ht
1122411224
task.row_height = task.bar_height + 4;
1122511225
}
1122611226
_increaseSplitParentHeight(task);
11227+
break;
11228+
default:
11229+
task.row_height = task.bar_height + 8;
11230+
break;
1122711231
}
1122811232
};
1122911233
function _increaseSplitParentHeight(task) {
@@ -14543,7 +14547,7 @@ https://docs.dhtmlx.com/gantt/faq.html#theganttchartisntrenderedcorrectly`);
1454314547
}
1454414548
function DHXGantt() {
1454514549
this.constants = constants;
14546-
this.version = "9.0.9";
14550+
this.version = "9.0.10";
1454714551
this.license = "gpl";
1454814552
this.templates = {};
1454914553
this.ext = {};
@@ -17197,10 +17201,19 @@ https://docs.dhtmlx.com/gantt/faq.html#theganttchartisntrenderedcorrectly`);
1719717201
var deltaY = ff ? e.deltaY : e.wheelDelta;
1719817202
var multiplier = -20;
1719917203
if (ff) {
17200-
if (e.deltaMode !== 0) {
17201-
multiplier = -40;
17204+
const version = parseInt(navigator.userAgent.split("Firefox/")[1]);
17205+
if (version <= 87) {
17206+
if (e.deltaMode !== 0) {
17207+
multiplier = -40;
17208+
} else {
17209+
multiplier = -10;
17210+
}
17211+
} else if (version <= 90) {
17212+
multiplier = -3;
17213+
} else if (version <= 96) {
17214+
multiplier = -1.5;
1720217215
} else {
17203-
multiplier = -10;
17216+
multiplier = -1;
1720417217
}
1720517218
}
1720617219
var wx = ff ? deltaX * multiplier * wheelSpeed.x : deltaX * 2 * wheelSpeed.x;
@@ -19968,7 +19981,7 @@ https://docs.dhtmlx.com/gantt/faq.html#theganttchartisntrenderedcorrectly`);
1996819981
}
1996919982
function _render_task_progress(task, element, maxWidth, cfg, templates2) {
1997019983
var done = task.progress * 1 || 0;
19971-
maxWidth = Math.max(maxWidth - 2, 0);
19984+
maxWidth = Math.max(maxWidth, 0);
1997219985
var pr = document.createElement("div");
1997319986
var width = Math.round(maxWidth * done);
1997419987
width = Math.min(maxWidth, width);
@@ -21989,6 +22002,9 @@ https://docs.dhtmlx.com/gantt/faq.html#theganttchartisntrenderedcorrectly`);
2198922002
for (var i in dragItems) {
2199022003
var drag = dragItems[i];
2199122004
var task = gantt2.getTask(drag.id);
22005+
if (task.unscheduled) {
22006+
continue;
22007+
}
2199222008
var coords_x = this._drag_task_coords(task, drag);
2199322009
var minX = gantt2.posFromDate(new Date(gantt2.getState().min_date));
2199422010
var maxX = gantt2.posFromDate(new Date(gantt2.getState().max_date));
@@ -22211,6 +22227,31 @@ https://docs.dhtmlx.com/gantt/faq.html#theganttchartisntrenderedcorrectly`);
2221122227
gantt2.mixin(task, drag.obj, true);
2221222228
}
2221322229
gantt2.refreshTask(task.id);
22230+
if (task.$level > 100) {
22231+
let shouldRepaint = false;
22232+
gantt2.eachParent(function(parent) {
22233+
if (!shouldRepaint && parent.type === gantt2.config.types.project) {
22234+
const initialDates = { start_date: parent.start_date, end_date: parent.end_date };
22235+
gantt2.resetProjectDates(parent);
22236+
if (+initialDates.start_date !== +parent.start_date || +initialDates.end_date !== +parent.end_date) {
22237+
shouldRepaint = true;
22238+
}
22239+
}
22240+
}, task.id);
22241+
if (shouldRepaint) {
22242+
gantt2.refreshData();
22243+
}
22244+
} else {
22245+
gantt2.eachParent(function(parent) {
22246+
if (parent.type === gantt2.config.types.project) {
22247+
const initialDates = { start_date: parent.start_date, end_date: parent.end_date };
22248+
gantt2.resetProjectDates(parent);
22249+
if (+initialDates.start_date !== +parent.start_date || +initialDates.end_date !== +parent.end_date) {
22250+
gantt2.refreshTask(parent.id);
22251+
}
22252+
}
22253+
}, task.id);
22254+
}
2221422255
} else {
2221522256
var drag_id = taskId;
2221622257
gantt2._init_task_timing(task);
@@ -24554,6 +24595,9 @@ https://docs.dhtmlx.com/gantt/faq.html#theganttchartisntrenderedcorrectly`);
2455424595
};
2455524596
ParentControl.prototype.set_value = function(node, value, ev, config2) {
2455624597
if (value === 0) value = "0";
24598+
if (!ev.id && gantt2.getState().lightbox) {
24599+
ev.id = gantt2.getLightboxValues().id;
24600+
}
2455724601
var tmpDom = document.createElement("div");
2455824602
tmpDom.innerHTML = _display(config2, ev.id);
2455924603
var newOptions = tmpDom.removeChild(tmpDom.firstChild);
@@ -25709,9 +25753,6 @@ https://docs.dhtmlx.com/gantt/faq.html#theganttchartisntrenderedcorrectly`);
2570925753
var content = gantt2.locale.labels.link + " " + gantt2.templates.drag_link(link.source, fromStart, link.target, toStart);
2571025754
div.setAttribute("role", "img");
2571125755
div.setAttribute("aria-label", stripHTMLLite(content));
25712-
if (gantt2.isReadonly(link)) {
25713-
div.setAttribute("aria-readonly", true);
25714-
}
2571525756
}, gridSeparatorAttr: function(div) {
2571625757
div.setAttribute("role", "columnheader");
2571725758
}, rowResizerAttr: function(div) {

codebase/sources/dhtmlxgantt.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codebase/sources/less/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "dhtmlx-gantt-skins",
3-
"version": "9.0.9",
3+
"version": "9.0.10",
44
"description": "Less sources and a build tool for DHTMLX Gantt skins",
55
"scripts": {
66
"build": "node scripts.js --file=dhtmlxgantt",

codebase/sources/less/task.less

+2-1
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,8 @@
249249
}
250250

251251
.gantt_task_drag {
252-
height: 16px;
252+
min-height: 16px;
253+
height: 50%;
253254
width: 8px;
254255
z-index: 1;
255256
top: -1px;

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "dhtmlx-gantt",
3-
"version": "9.0.9",
3+
"version": "9.0.10",
44
"description": "An open source JavaScript Gantt chart that helps you illustrate a project schedule in a nice-looking chart.",
55
"main": "codebase/dhtmlxgantt.es.js",
66
"types": "codebase/dhtmlxgantt.d.ts",

whatsnew.md

+18-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
1+
### 9.0.10
2+
3+
Fix the issue preventing changes to the parent field value in the Lightbox
4+
Fix excessive scroll speed when using a mouse wheel in Firefox 88 and newer
5+
Fix the inability to drag Project tasks when a subtask is unscheduled and lacks date parameters
6+
Ensure gantt.render() is not called unexpectedly during the gantt.silent operation when using the open or close methods
7+
Fix the issue where Project tasks are not repainted if the onBeforeTaskChanged event returns false
8+
Ensure that task progress bars span the full width of the task when expected
9+
Remove invalid WAI-ARIA attributes from read-only task links to improve accessibility
10+
Fix the issue where task bar resizers do not adapt to changes in task bar height
11+
112
### 9.0.9
213

3-
- Added examples of ReactGantt in the Commercial, Enterprice, Ultimate and Evaluation packages
4-
- Fix the issue where mouse wheel zooming stopped working after calling the resetLayout method
5-
- Fix the issue where the Quick Info popup appeared after clicking the expand/collapse button in the Timeline or Units views
6-
- Fix the script error that occurred when destroying Scheduler without the grid view initially rendered
7-
- Fix the error when loading a task with a non-existent parent while the Undo extension is enabled
8-
- Fix the issue where the click_drag extension did not work on touch devices
9-
- Improve grid scrolling experience on touch devices
14+
Added examples of ReactGantt in the Commercial, Enterprice, Ultimate and Evaluation packages
15+
Fix the issue where mouse wheel zooming stopped working after calling the resetLayout method
16+
Fix the issue where the Quick Info popup appeared after clicking the expand/collapse button in the Timeline or Units views
17+
Fix the script error that occurred when destroying Scheduler without the grid view initially rendered
18+
Fix the error when loading a task with a non-existent parent while the Undo extension is enabled
19+
Fix the issue where the click_drag extension did not work on touch devices
20+
Improve grid scrolling experience on touch devices
1021

1122
### 9.0.7
1223

0 commit comments

Comments
 (0)