c3
Version:
D3-based reusable chart library
166 lines (158 loc) • 5.3 kB
text/typescript
import CLASS from './class'
import { ChartInternal } from './core'
import { isValue, ceil10, isDefined } from './util'
ChartInternal.prototype.getCurrentWidth = function() {
var $$ = this,
config = $$.config
return config.size_width ? config.size_width : $$.getParentWidth()
}
ChartInternal.prototype.getCurrentHeight = function() {
var $$ = this,
config = $$.config,
h = config.size_height ? config.size_height : $$.getParentHeight()
return h > 0
? h
: 320 / ($$.hasType('gauge') && !config.gauge_fullCircle ? 2 : 1)
}
ChartInternal.prototype.getCurrentPaddingTop = function() {
var $$ = this,
config = $$.config,
padding = isValue(config.padding_top) ? config.padding_top : 0
if ($$.title && $$.title.node()) {
padding += $$.getTitlePadding()
}
return padding
}
ChartInternal.prototype.getCurrentPaddingBottom = function() {
var config = this.config
return isValue(config.padding_bottom) ? config.padding_bottom : 0
}
ChartInternal.prototype.getCurrentPaddingLeft = function(withoutRecompute) {
var $$ = this,
config = $$.config
if (isValue(config.padding_left)) {
return config.padding_left
} else if (config.axis_rotated) {
return !config.axis_x_show || config.axis_x_inner
? 1
: Math.max(ceil10($$.getAxisWidthByAxisId('x', withoutRecompute)), 40)
} else if (!config.axis_y_show || config.axis_y_inner) {
// && !config.axis_rotated
return $$.axis.getYAxisLabelPosition().isOuter ? 30 : 1
} else {
return ceil10($$.getAxisWidthByAxisId('y', withoutRecompute))
}
}
ChartInternal.prototype.getCurrentPaddingRight = function() {
var $$ = this,
config = $$.config,
padding = 0,
defaultPadding = 10,
legendWidthOnRight = $$.isLegendRight ? $$.getLegendWidth() + 20 : 0
if (isValue(config.padding_right)) {
padding = config.padding_right + 1 // 1 is needed not to hide tick line
} else if (config.axis_rotated) {
padding = defaultPadding + legendWidthOnRight
} else if (!config.axis_y2_show || config.axis_y2_inner) {
// && !config.axis_rotated
padding =
2 +
legendWidthOnRight +
($$.axis.getY2AxisLabelPosition().isOuter ? 20 : 0)
} else {
padding = ceil10($$.getAxisWidthByAxisId('y2')) + legendWidthOnRight
}
if ($$.colorScale && $$.colorScale.node()) {
padding += $$.getColorScalePadding()
}
return padding
}
ChartInternal.prototype.getParentRectValue = function(key) {
var parent = this.selectChart.node(),
v
while (parent && parent.tagName !== 'BODY') {
try {
v = parent.getBoundingClientRect()[key]
} catch (e) {
if (key === 'width') {
// In IE in certain cases getBoundingClientRect
// will cause an "unspecified error"
v = parent.offsetWidth
}
}
if (v) {
break
}
parent = parent.parentNode
}
return v
}
ChartInternal.prototype.getParentWidth = function() {
return this.getParentRectValue('width')
}
ChartInternal.prototype.getParentHeight = function() {
var h = this.selectChart.style('height')
return h.indexOf('px') > 0 ? +h.replace('px', '') : 0
}
ChartInternal.prototype.getSvgLeft = function(withoutRecompute) {
var $$ = this,
config = $$.config,
hasLeftAxisRect =
config.axis_rotated || (!config.axis_rotated && !config.axis_y_inner),
leftAxisClass = config.axis_rotated ? CLASS.axisX : CLASS.axisY,
leftAxis = $$.main.select('.' + leftAxisClass).node(),
svgRect =
leftAxis && hasLeftAxisRect
? leftAxis.getBoundingClientRect()
: { right: 0 },
chartRect = $$.selectChart.node().getBoundingClientRect(),
hasArc = $$.hasArcType(),
svgLeft =
svgRect.right -
chartRect.left -
(hasArc ? 0 : $$.getCurrentPaddingLeft(withoutRecompute))
return svgLeft > 0 ? svgLeft : 0
}
ChartInternal.prototype.getAxisWidthByAxisId = function(id, withoutRecompute) {
var $$ = this,
position = $$.axis.getLabelPositionById(id)
return (
$$.axis.getMaxTickWidth(id, withoutRecompute) + (position.isInner ? 20 : 40)
)
}
ChartInternal.prototype.getHorizontalAxisHeight = function(axisId, isSubchart) {
var $$ = this,
config = $$.config,
h = 30
if (axisId === 'x' && !(isDefined(isSubchart) && isSubchart ? config.subchart_axis_x_show : config.axis_x_show)) {
return 8
}
if (axisId === 'x' && config.axis_x_height) {
return config.axis_x_height
}
if (axisId === 'y' && !config.axis_y_show) {
return config.legend_show && !$$.isLegendRight && !$$.isLegendInset ? 10 : 1
}
if (axisId === 'y2' && !config.axis_y2_show) {
return $$.rotated_padding_top
}
// Calculate x axis height when tick rotated
if (axisId === 'x' && !config.axis_rotated && config.axis_x_tick_rotate) {
h =
30 +
$$.axis.getMaxTickWidth(axisId) *
Math.cos((Math.PI * (90 - Math.abs(config.axis_x_tick_rotate))) / 180)
}
// Calculate y axis height when tick rotated
if (axisId === 'y' && config.axis_rotated && config.axis_y_tick_rotate) {
h =
30 +
$$.axis.getMaxTickWidth(axisId) *
Math.cos((Math.PI * (90 - Math.abs(config.axis_y_tick_rotate))) / 180)
}
return (
h +
($$.axis.getLabelPositionById(axisId).isInner ? 0 : 10) +
(axisId === 'y2' ? -10 : 0)
)
}