HTMLcopy
1
<div id="container"></div>
CSScopy
8
1
html,
2
body,
3
#container {
4
width: 100%;
5
height: 100%;
6
margin: 0;
7
padding: 0;
8
}
JavaScriptcopy
x
1
anychart.onDocumentReady(function () {
2
// The data used in this sample can be obtained from the CDN
3
// https://cdn.anychart.com/samples/gantt-charts/planned-vs-actual-chart/data.json
4
anychart.data.loadJsonFile(
5
'https://cdn.anychart.com/samples/gantt-charts/planned-vs-actual-chart/data.json',
6
function (data) {
7
// create data tree
8
var treeData = anychart.data.tree(data, 'as-table');
9
10
// create project gantt chart
11
var chart = anychart.ganttProject();
12
13
// set data for the chart
14
chart.data(treeData);
15
16
// set start splitter position settings
17
chart.splitterPosition(460);
18
19
// get chart data grid link to set column settings
20
var dataGrid = chart.dataGrid();
21
22
// set first column settings
23
dataGrid.column(0).labels({ hAlign: 'center' });
24
25
// set second column settings
26
dataGrid
27
.column(1)
28
.width(200)
29
.labelsOverrider(labelTextSettingsFormatter);
30
31
// set third column settings
32
dataGrid
33
.column(2)
34
.title('Baseline Start')
35
.width(100)
36
.labelsOverrider(labelTextSettingsFormatter)
37
.labels()
38
.format(thirdColumnTextFormatter);
39
40
// set fourth column settings
41
dataGrid
42
.column(3)
43
.title('Baseline End')
44
.width(100)
45
.labelsOverrider(labelTextSettingsFormatter)
46
.labels()
47
.format(fourthColumnTextFormatter);
48
49
var timeline = chart.getTimeline();
50
51
// place baseline on the top of row
52
timeline.baselines().above(true);
53
54
// enable milestones preview
55
timeline.milestones().preview().enabled(true);
56
timeline.baselineMilestones().preview().enabled(true);
57
58
// set container id for the chart
59
chart.container('container');
60
61
// initiate chart drawing
62
chart.draw();
63
64
// zoom chart to specified date
65
chart.zoomTo(Date.UTC(2010, 0, 8, 15), Date.UTC(2010, 3, 25, 20));
66
}
67
);
68
});
69
70
// add bold and italic text settings to all parent items
71
function labelTextSettingsFormatter(label, dataItem) {
72
if (dataItem.numChildren()) {
73
label.fontWeight('bold').fontStyle('italic');
74
}
75
}
76
77
// do pretty formatting for dates in third column
78
function thirdColumnTextFormatter(data) {
79
var field = data.baselineStart;
80
81
// format base line text
82
if (field) {
83
var baselineStart = new Date(field);
84
return (
85
formatDate(baselineStart.getUTCMonth() + 1) +
86
'/' +
87
formatDate(baselineStart.getUTCDate()) +
88
'/' +
89
baselineStart.getUTCFullYear() +
90
' ' +
91
formatDate(baselineStart.getUTCHours()) +
92
':' +
93
formatDate(baselineStart.getUTCMinutes())
94
);
95
}
96
// format milestone text
97
var actualStart = data.item.get('actualStart');
98
var actualEnd = data.item.get('actualEnd');
99
if (actualStart === actualEnd || (actualStart && !actualEnd)) {
100
var start = new Date(actualStart);
101
return (
102
formatDate(start.getUTCMonth() + 1) +
103
'/' +
104
formatDate(start.getUTCDate()) +
105
'/' +
106
start.getUTCFullYear() +
107
' ' +
108
formatDate(start.getUTCHours()) +
109
':' +
110
formatDate(start.getUTCMinutes())
111
);
112
}
113
return '';
114
}
115
116
// do pretty formatting for dates in fourth column
117
function fourthColumnTextFormatter(item) {
118
var field = item.baselineEnd;
119
if (field) {
120
var baselineEnd = new Date(field);
121
return (
122
formatDate(baselineEnd.getUTCMonth() + 1) +
123
'/' +
124
formatDate(baselineEnd.getUTCDate()) +
125
'/' +
126
baselineEnd.getUTCFullYear() +
127
' ' +
128
formatDate(baselineEnd.getUTCHours()) +
129
':' +
130
formatDate(baselineEnd.getUTCMinutes())
131
);
132
}
133
return '';
134
}
135
136
// do pretty formatting for passed date unit
137
function formatDate(dateUnit) {
138
if (dateUnit < 10) dateUnit = '0' + dateUnit;
139
return dateUnit + '';
140
}