angular2-nvd3
Version:
Angular2 module for NVD3 chart
206 lines (205 loc) • 7.71 kB
JavaScript
"use strict";
var d3 = require("d3");
var nv = require("nvd3");
var Angular2NvD3;
(function (Angular2NvD3) {
var NgNvD3 = (function () {
function NgNvD3(el) {
this.viewInitialize = false;
this.el = el;
}
NgNvD3.prototype.isViewInitialize = function (value) {
this.viewInitialize = value;
};
NgNvD3.prototype.updateWithOptions = function (options, data) {
if (!this.viewInitialize || !options) {
return;
}
;
var self = this;
this.clearElement();
this.chart = nv.models[options.chart.type]();
this.chart.id = Math.random().toString(36).substr(2, 15);
for (var key in this.chart) {
if (!this.chart.hasOwnProperty(key)) {
continue;
}
if (key[0] === '_') {
}
else if ([
'clearHighlights',
'highlightPoint',
'id',
'options',
'resizeHandler',
'state',
'open',
'close',
'tooltipContent'
].indexOf(key) >= 0) {
}
else if (key === 'dispatch') {
this.configureEvents(this.chart[key], options.chart[key]);
}
else if ([
'bars',
'bars1',
'bars2',
'boxplot',
'bullet',
'controls',
'discretebar',
'distX',
'distY',
'interactiveLayer',
'legend',
'lines',
'lines1',
'lines2',
'multibar',
'pie',
'scatter',
'scatters1',
'scatters2',
'sparkline',
'stack1',
'stack2',
'sunburst',
'tooltip',
'x2Axis',
'xAxis',
'y1Axis',
'y2Axis',
'y3Axis',
'y4Axis',
'yAxis',
'yAxis1',
'yAxis2'
].indexOf(key) >= 0 ||
(key === 'stacked' && options.chart.type === 'stackedAreaChart')) {
this.configure(this.chart[key], options.chart[key], options.chart.type);
}
else if ((key === 'xTickFormat' || key === 'yTickFormat') && options.chart.type === 'lineWithFocusChart') {
}
else if ((key === 'tooltips') && options.chart.type === 'boxPlotChart') {
}
else if ((key === 'tooltipXContent' || key === 'tooltipYContent') && options.chart.type === 'scatterChart') {
}
else if (options.chart[key] === undefined || options.chart[key] === null) {
}
else {
this.chart[key](options.chart[key]);
}
}
this.updateWithData(data, options);
nv.addGraph(function () {
if (!self.chart) {
return;
}
if (self.chart.resizeHandler) {
self.chart.resizeHandler.clear();
}
self.chart.resizeHandler = nv.utils.windowResize(function () {
if (self.chart && self.chart.update) {
self.chart.update();
}
});
return self.chart;
}, options.chart['callback']);
};
NgNvD3.prototype.updateWithData = function (data, options) {
if (data) {
d3.select(this.el.nativeElement).select('svg').remove();
var h = void 0, w = void 0;
this.svg = d3.select(this.el.nativeElement).append('svg');
if (h = options.chart.height) {
if (!isNaN(+h)) {
h += 'px';
}
this.svg.attr('height', h).style({ height: h });
}
if (w = options.chart.width) {
if (!isNaN(+w)) {
w += 'px';
}
this.svg.attr('width', w).style({ width: w });
}
else {
this.svg.attr('width', '100%').style({ width: '100%' });
}
this.svg.datum(data).call(this.chart);
}
};
NgNvD3.prototype.configure = function (chart, options, chartType) {
if (chart && options) {
for (var key in chart) {
if (!chart.hasOwnProperty(key)) {
continue;
}
var value = chart[key];
if (key[0] === '_') {
}
else if (key === 'dispatch') {
this.configureEvents(value, options[key]);
}
else if (key === 'tooltip') {
this.configure(chart[key], options[key], chartType);
}
else if (key === 'contentGenerator') {
if (options[key]) {
chart[key](options[key]);
}
}
else if ([
'axis',
'clearHighlights',
'defined',
'highlightPoint',
'nvPointerEventsClass',
'options',
'rangeBand',
'rangeBands',
'scatter',
'open',
'close'
].indexOf(key) === -1) {
if (options[key] === undefined || options[key] === null) {
}
else {
chart[key](options[key]);
}
}
}
}
};
NgNvD3.prototype.configureEvents = function (dispatch, options) {
if (dispatch && options) {
for (var key in dispatch) {
if (!dispatch.hasOwnProperty(key)) {
continue;
}
if (options[key] === undefined || options[key] === null) {
}
else {
dispatch.on(key + '._', options[key]);
}
}
}
};
NgNvD3.prototype.clearElement = function () {
this.el.nativeElement.innerHTML = '';
if (this.chart && this.chart.tooltip && this.chart.tooltip.id) {
d3.select('#' + this.chart.tooltip.id()).remove();
}
if (nv.tooltip && nv.tooltip.cleanup) {
nv.tooltip.cleanup();
}
if (this.chart && this.chart.resizeHandler) {
this.chart.resizeHandler.clear();
}
this.chart = null;
};
return NgNvD3;
}());
Angular2NvD3.NgNvD3 = NgNvD3;
})(Angular2NvD3 = exports.Angular2NvD3 || (exports.Angular2NvD3 = {}));