tupali/librerias/gantt/code/es-modules/parts-gantt/GanttChart.js
2020-05-23 15:45:54 -05:00

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
};