import * as Collections from 'immutable'; import { SeriesProperities, ColumnProperties, BarProperties, ScatterProperties, PieProperties } from './plotOptions/series'; import {HighChartSeries} from './high-chart-series'; import {Formatter} from '../util/formatter'; export class NavigationButtonOptionsProperties { y: number; x: number; verticalAlign: string; } export class NavigationProperties { public buttonOptions: NavigationButtonOptionsProperties; constructor() { this.buttonOptions = new NavigationButtonOptionsProperties(); } } export class ChartProperties { public type: string; public fontFamily: string; public spacingBottom: number; public spacingTop: number; public spacingLeft: number; public spacingRight: number; public marginBottom: number; public marginTop: number; public marginLeft: number; public marginRight: number; public width: number; public height: number; public inverted: boolean; public plotBorderWidth: number; public plotBorderColor: string; constructor() { } } export class LegendItemStyle { public fontSize: string; constructor() { } } export class LegendProperties { public enabled: boolean; public align: string; public verticalAlign?: string; public y?: number; public x?: number; public layout?: string; public itemStyle: LegendItemStyle; labelFormatter: Function; constructor() { } } export class Title { public text: string; public align?: string; constructor() { } } export class ColorProperties { public color: string[]; constructor() { } } export class Labels { enabled: boolean; format: string; constructor() { } } export class XAxisStyleProperties { fontSize: string; lineHeight: number; } export class StyleXAxisLabels { public step: number; public enabled: boolean; public style: XAxisStyleProperties; constructor() { } } export class AxisTitle { public align: string; public enabled: string; public margin: number; public offset: number; public position3d: string; public reserveSpace: boolean; public rotation: number; public skew3d: boolean; public style: any; public text: string; public useHTML: boolean; public x: number; public y: number; } export class XAxisProperties { public categories: string[]; public gridLineWidth: number; public lineColor: string; public tickLength: number; public minorGridLineWidth: number; public style: XAxisStyleProperties; public labels: StyleXAxisLabels; public title: AxisTitle; constructor() { } } export class YAxisPlotLines { public color: string; public width: number; public value: 0; } export class YAxisProperties { // public categories: string[]; public gridLineWidth: number; public lineColor: string; public tickLength: number; public minorGridLineWidth: number; public tickAmount: number; public labels: Labels; public min: number; public max: number; public tickInterval: number; public lineWidth: number; public plotLines: YAxisPlotLines[]; public title: AxisTitle; constructor() { this.labels = new Labels(); } } export class PlotOptionsProperties { public series: SeriesProperities; public column: ColumnProperties; public bar: BarProperties; public pie: PieProperties; public scatter: ScatterProperties; constructor() { this.series = new SeriesProperities(); this.column = new ColumnProperties(); this.bar = new BarProperties(); this.scatter = new ScatterProperties(); this.pie = new PieProperties(); } } export class CreditsProperties { public enabled: boolean; constructor() { } } export class TooltipTemplate { formatter: Function; } export class ChartTemplate { public title: Title | any; public chart: ChartProperties | any; public legend: LegendProperties | any; public tooltip: TooltipTemplate | any; public colors: String[] | any; public series: HighChartSeries[] | any; public xAxis: XAxisProperties | any; public yAxis: YAxisProperties | any; public plotOptions: PlotOptionsProperties | any; public credits: CreditsProperties | any; public navigation: NavigationProperties | any; private readonly omitFunctions: Array = [ 'constructor', 'omitFunctions', 'getTooltip', 'getNavigation', 'getCredits', 'getColors', 'getChart', 'getTitle', 'getSeries', 'getXAxis', 'getYAxis', 'getLabels', 'getPlotOptions', 'getSeriesPlotOptions', 'getSeriesDataLabels', 'getBarPlotOptions', 'getPiePlotOptions', 'getDataLabelsBarPlotOptions', 'getTooltipPlotOptions', 'getLegend', 'getColumnPlotOptions', 'getDataLabelsColumnPlotOptions', 'getScatterPlotOptions', 'getDataLabelsScatterPlotOptions', 'convert', 'toPlainObject', 'loadDataBarOrColumnOrLine', 'loadDataOneBar_TwoScatterSeries', 'loadDataBarOrColumnOrLineWithColors', 'loadDataOneBar_OneScatterSeries', 'loadDataMultiSeriesBarOrColumn' ]; constructor() { } public toPlainObject(): any { return this.convert(this); } private convert(proto) { const jsoned = {}; const toConvert = proto || this; Object.getOwnPropertyNames(toConvert).forEach((prop) => { const val = toConvert[prop]; // don't include those if (this.omitFunctions.indexOf(prop) >= 0) { return; } else if (typeof val === 'function') { jsoned[prop] = val; } else if (val != null && val.constructor === Array) { const arr: Array = []; val.forEach((ele) => { if (!ele) { arr.push(ele); } else if (typeof ele === 'object') { arr.push(this.convert(ele)); } else { arr.push(ele); } }); jsoned[prop] = arr; } else if (val != null && typeof val === 'object') { jsoned[prop] = this.convert(val); } else { jsoned[prop] = val; } }); const inherited = Object.getPrototypeOf(toConvert); if (inherited !== null) { Object.keys(this.convert(inherited)).forEach(key => { if (!!jsoned[key] || key === 'constructor' || key === 'convert') { return; } if (typeof inherited[key] === 'function') { jsoned[key] = inherited[key].bind(jsoned); return; } jsoned[key] = inherited[key]; }); } return jsoned; } public loadDataBarOrColumnOrLine(data: any, categoryColumm: string, dataColumn: string, type?: string): void { new Formatter().loadDataBarOrColumnOrLine(this, data, categoryColumm, dataColumn, type); } public loadDataOneBar_TwoScatterSeries(data: any, categoryColumn: string, dataName: string, dataColumn: string, colorsColumn: string, scatterOneName: string, scatterOneColumn: string, scatterTwoName: string, scatterTwoColumn: string): void { new Formatter().loadDataOneBar_TwoScatterSeries( this, data, categoryColumn, dataName, dataColumn, colorsColumn, scatterOneName, scatterOneColumn, scatterTwoName, scatterTwoColumn); } public loadDataBarOrColumnOrLineWithColors(data: any, categoryColumn: string, dataColumn: string, colors: string[]): void { new Formatter().loadDataBarOrColumnOrLineWithColors(this, data, categoryColumn, dataColumn, colors); } public loadDataOneBar_OneScatterSeries(data: any, categoryColumn: string, dataName: string, dataColumn: string, colorsColumn: string, scatterOneName: string, scatterOneColumn: string): void { new Formatter().loadDataOneBar_OneScatterSeries( this, data, categoryColumn, dataName, dataColumn, colorsColumn, scatterOneName, scatterOneColumn ); } public loadDataMultiSeriesBarOrColumn(data: any, categoryColumn: string, dataNames: string[], dataColumns: string[], seriesType?: string[], seriesColors?: string[]) { new Formatter().loadDataMultiSeriesBarOrColumn( this, data, categoryColumn, dataNames, dataColumns, seriesType, seriesColors ); } }