apexcharts
Version:
A JavaScript Chart Library
152 lines (125 loc) • 3.68 kB
JavaScript
import AxesUtils from '../axes/AxesUtils'
export default class DimGrid {
constructor(dCtx) {
this.w = dCtx.w
this.dCtx = dCtx
}
gridPadForColumnsInNumericAxis(gridWidth) {
const w = this.w
if (w.globals.noData || w.globals.allSeriesCollapsed) {
return 0
}
const hasBar = (type) => {
return (
type === 'bar' ||
type === 'rangeBar' ||
type === 'candlestick' ||
type === 'boxPlot'
)
}
const type = w.config.chart.type
let barWidth = 0
let seriesLen = hasBar(type) ? w.config.series.length : 1
if (w.globals.comboBarCount > 0) {
seriesLen = w.globals.comboBarCount
}
w.globals.collapsedSeries.forEach((c) => {
if (hasBar(c.type)) {
seriesLen = seriesLen - 1
}
})
if (w.config.chart.stacked) {
seriesLen = 1
}
const barsPresent = hasBar(type) || w.globals.comboBarCount > 0
if (
barsPresent &&
w.globals.isXNumeric &&
!w.globals.isBarHorizontal &&
seriesLen > 0
) {
let xRatio = 0
let xRange = Math.abs(w.globals.initialMaxX - w.globals.initialMinX)
if (xRange <= 3) {
xRange = w.globals.dataPoints
}
xRatio = xRange / gridWidth
let xDivision
// max barwidth should be equal to minXDiff to avoid overlap
if (w.globals.minXDiff && w.globals.minXDiff / xRatio > 0) {
xDivision = w.globals.minXDiff / xRatio
}
if (xDivision > gridWidth / 2) {
xDivision = xDivision / 2
}
barWidth =
((xDivision / seriesLen) *
parseInt(w.config.plotOptions.bar.columnWidth, 10)) /
100
if (barWidth < 1) {
barWidth = 1
}
barWidth = barWidth / (seriesLen > 1 ? 1 : 1.5) + 5
w.globals.barPadForNumericAxis = barWidth
}
return barWidth
}
gridPadFortitleSubtitle() {
const w = this.w
const gl = w.globals
let gridShrinkOffset =
this.dCtx.isSparkline || !w.globals.axisCharts ? 0 : 10
const titleSubtitle = ['title', 'subtitle']
titleSubtitle.forEach((t) => {
if (w.config[t].text !== undefined) {
gridShrinkOffset += w.config[t].margin
} else {
gridShrinkOffset +=
this.dCtx.isSparkline || !w.globals.axisCharts ? 0 : 5
}
})
if (
w.config.legend.show &&
w.config.legend.position === 'bottom' &&
!w.config.legend.floating &&
!w.globals.axisCharts
) {
gridShrinkOffset += 10
}
let titleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords('title')
let subtitleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords('subtitle')
gl.gridHeight =
gl.gridHeight -
titleCoords.height -
subtitleCoords.height -
gridShrinkOffset
gl.translateY =
gl.translateY +
titleCoords.height +
subtitleCoords.height +
gridShrinkOffset
}
setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords) {
let w = this.w
const axesUtils = new AxesUtils(this.dCtx.ctx)
w.config.yaxis.map((yaxe, index) => {
if (
w.globals.ignoreYAxisIndexes.indexOf(index) === -1 &&
!yaxe.floating &&
!axesUtils.isYAxisHidden(index)
) {
if (yaxe.opposite) {
w.globals.translateX =
w.globals.translateX -
(yaxisLabelCoords[index].width + yTitleCoords[index].width) -
parseInt(w.config.yaxis[index].labels.style.fontSize, 10) / 1.2 -
12
}
// fixes apexcharts.js#1599
if (w.globals.translateX < 2) {
w.globals.translateX = 2
}
}
})
}
}