@progress/kendo-charts
Version:
Kendo UI platform-independent Charts library
213 lines (175 loc) • 6.19 kB
JavaScript
import { Chart } from '../chart';
import Navigator from './navigator';
import { DEFAULT_WIDTH } from '../common/constants';
import { addClass, deepExtend, elementSize, grep, setDefaultOptions } from '../common';
import { NAVIGATOR_AXIS, NAVIGATOR_PANE } from './constants';
var AUTO_CATEGORY_WIDTH = 28;
var StockChart = (function (Chart) {
function StockChart () {
Chart.apply(this, arguments);
}
if ( Chart ) StockChart.__proto__ = Chart;
StockChart.prototype = Object.create( Chart && Chart.prototype );
StockChart.prototype.constructor = StockChart;
StockChart.prototype.applyDefaults = function applyDefaults (options, themeOptions) {
var width = elementSize(this.element).width || DEFAULT_WIDTH;
var theme = themeOptions;
var stockDefaults = {
seriesDefaults: {
categoryField: options.dateField
},
axisDefaults: {
categoryAxis: {
name: "default",
majorGridLines: {
visible: false
},
labels: {
step: 2
},
majorTicks: {
visible: false
},
maxDateGroups: Math.floor(width / AUTO_CATEGORY_WIDTH)
}
}
};
if (theme) {
theme = deepExtend({}, theme, stockDefaults);
}
Navigator.setup(options, theme);
Chart.prototype.applyDefaults.call(this, options, theme);
};
StockChart.prototype._setElementClass = function _setElementClass (element) {
addClass(element, 'k-chart k-stockchart');
};
StockChart.prototype.setOptions = function setOptions (options) {
this.destroyNavigator();
Chart.prototype.setOptions.call(this, options);
};
StockChart.prototype.noTransitionsRedraw = function noTransitionsRedraw () {
var transitions = this.options.transitions;
this.options.transitions = false;
this._fullRedraw();
this.options.transitions = transitions;
};
StockChart.prototype._resize = function _resize () {
this.noTransitionsRedraw();
};
StockChart.prototype._redraw = function _redraw () {
var navigator = this.navigator;
if (!this._dirty() && navigator && navigator.options.partialRedraw) {
navigator.redrawSlaves();
} else {
this._fullRedraw();
}
};
StockChart.prototype._dirty = function _dirty () {
var options = this.options;
var series = [].concat(options.series, options.navigator.series);
var seriesCount = grep(series, function(s) { return s && s.visible; }).length;
var dirty = this._seriesCount !== seriesCount;
this._seriesCount = seriesCount;
return dirty;
};
StockChart.prototype._fullRedraw = function _fullRedraw () {
var navigator = this.navigator;
if (!navigator) {
navigator = this.navigator = new Navigator(this);
this.trigger("navigatorCreated", { navigator: navigator });
}
navigator.clean();
navigator.setRange();
Chart.prototype._redraw.call(this);
navigator.initSelection();
};
StockChart.prototype._trackSharedTooltip = function _trackSharedTooltip (coords) {
var plotArea = this._plotArea;
var pane = plotArea.paneByPoint(coords);
if (pane && pane.options.name === NAVIGATOR_PANE) {
this._unsetActivePoint();
} else {
Chart.prototype._trackSharedTooltip.call(this, coords);
}
};
StockChart.prototype.bindCategories = function bindCategories () {
Chart.prototype.bindCategories.call(this);
this.copyNavigatorCategories();
};
StockChart.prototype.copyNavigatorCategories = function copyNavigatorCategories () {
var definitions = [].concat(this.options.categoryAxis);
var categories;
for (var axisIx = 0; axisIx < definitions.length; axisIx++) {
var axis = definitions[axisIx];
if (axis.name === NAVIGATOR_AXIS) {
categories = axis.categories;
} else if (categories && axis.pane === NAVIGATOR_PANE) {
axis.categories = categories;
}
}
};
StockChart.prototype.destroyNavigator = function destroyNavigator () {
if (this.navigator) {
this.navigator.destroy();
this.navigator = null;
}
};
StockChart.prototype.destroy = function destroy () {
this.destroyNavigator();
Chart.prototype.destroy.call(this);
};
StockChart.prototype._stopChartHandlers = function _stopChartHandlers (e) {
var coords = this._eventCoordinates(e);
var pane = this._plotArea.paneByPoint(coords);
return Chart.prototype._stopChartHandlers.call(this, e) || (pane && pane.options.name === NAVIGATOR_PANE);
};
StockChart.prototype._toggleDragZoomEvents = function _toggleDragZoomEvents () {
if (!this._dragZoomEnabled) {
this.element.style.touchAction = "none";
this._dragZoomEnabled = true;
}
};
return StockChart;
}(Chart));
setDefaultOptions(StockChart, {
dateField: "date",
axisDefaults: {
categoryAxis: {
type: "date",
baseUnit: "fit",
justified: true
},
valueAxis: {
narrowRange: true,
labels: {
format: "C"
}
}
},
navigator: {
select: {},
seriesDefaults: {
markers: {
visible: false
},
tooltip: {
visible: false
},
highlight: {
visible: false
},
line: {
width: 2
}
},
hint: {},
visible: true
},
tooltip: {
visible: true
},
legend: {
visible: false
}
});
export default StockChart;