114 lines
3.4 KiB
JavaScript
114 lines
3.4 KiB
JavaScript
/* *
|
|
*
|
|
* (c) 2016-2020 Highsoft AS
|
|
*
|
|
* Author: Lars A. V. Cabrera
|
|
*
|
|
* License: www.highcharts.com/license
|
|
*
|
|
* !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
|
|
*
|
|
* */
|
|
'use strict';
|
|
import H from '../parts/Globals.js';
|
|
import U from '../parts/Utilities.js';
|
|
var isArray = U.isArray, merge = U.merge, splat = U.splat;
|
|
import './GanttSeries.js';
|
|
var Chart = H.Chart;
|
|
/**
|
|
* Factory function for Gantt charts.
|
|
*
|
|
* @example
|
|
* // Render a chart in to div#container
|
|
* var chart = Highcharts.ganttChart('container', {
|
|
* title: {
|
|
* text: 'My chart'
|
|
* },
|
|
* series: [{
|
|
* data: ...
|
|
* }]
|
|
* });
|
|
*
|
|
* @function Highcharts.ganttChart
|
|
*
|
|
* @param {string|Highcharts.HTMLDOMElement} renderTo
|
|
* The DOM element to render to, or its id.
|
|
*
|
|
* @param {Highcharts.Options} options
|
|
* The chart options structure.
|
|
*
|
|
* @param {Highcharts.ChartCallbackFunction} [callback]
|
|
* Function to run when the chart has loaded and and all external images
|
|
* are loaded. Defining a
|
|
* [chart.events.load](https://api.highcharts.com/highcharts/chart.events.load)
|
|
* handler is equivalent.
|
|
*
|
|
* @return {Highcharts.Chart}
|
|
* Returns the Chart object.
|
|
*/
|
|
H.ganttChart = function (renderTo, options, callback) {
|
|
var hasRenderToArg = typeof renderTo === 'string' || renderTo.nodeName, seriesOptions = options.series, defaultOptions = H.getOptions(), defaultLinkedTo, userOptions = options;
|
|
options = arguments[hasRenderToArg ? 1 : 0];
|
|
// If user hasn't defined axes as array, make it into an array and add a
|
|
// second axis by default.
|
|
if (!isArray(options.xAxis)) {
|
|
options.xAxis = [options.xAxis || {}, {}];
|
|
}
|
|
// apply X axis options to both single and multi x axes
|
|
options.xAxis = options.xAxis.map(function (xAxisOptions, i) {
|
|
if (i === 1) { // Second xAxis
|
|
defaultLinkedTo = 0;
|
|
}
|
|
return merge(defaultOptions.xAxis, {
|
|
grid: {
|
|
enabled: true
|
|
},
|
|
opposite: true,
|
|
linkedTo: defaultLinkedTo
|
|
}, xAxisOptions, // user options
|
|
{
|
|
type: 'datetime'
|
|
});
|
|
});
|
|
// apply Y axis options to both single and multi y axes
|
|
options.yAxis = (splat(options.yAxis || {})).map(function (yAxisOptions) {
|
|
return merge(defaultOptions.yAxis, // #3802
|
|
{
|
|
grid: {
|
|
enabled: true
|
|
},
|
|
staticScale: 50,
|
|
reversed: true,
|
|
// Set default type treegrid, but only if 'categories' is
|
|
// undefined
|
|
type: yAxisOptions.categories ? yAxisOptions.type : 'treegrid'
|
|
}, yAxisOptions // user options
|
|
);
|
|
});
|
|
options.series = null;
|
|
options = merge(true, {
|
|
chart: {
|
|
type: 'gantt'
|
|
},
|
|
title: {
|
|
text: null
|
|
},
|
|
legend: {
|
|
enabled: false
|
|
}
|
|
}, options, // user's options
|
|
// forced options
|
|
{
|
|
isGantt: true
|
|
});
|
|
options.series = userOptions.series = seriesOptions;
|
|
options.series.forEach(function (series) {
|
|
series.data.forEach(function (point) {
|
|
H.seriesTypes.gantt.prototype.setGanttPointAliases(point);
|
|
});
|
|
});
|
|
return hasRenderToArg ?
|
|
new Chart(renderTo, options, callback) :
|
|
new Chart(options, options); // @todo does not look correct
|
|
};
|