import CLASS from './class' import { ChartInternal } from './core' import { isValue } from './util' ChartInternal.prototype.initRegion = function() { var $$ = this $$.region = $$.main .append('g') .attr('clip-path', $$.clipPath) .attr('class', CLASS.regions) } ChartInternal.prototype.updateRegion = function(duration) { var $$ = this, config = $$.config // hide if arc type $$.region.style('visibility', $$.hasArcType() ? 'hidden' : 'visible') var mainRegion = $$.main .select('.' + CLASS.regions) .selectAll('.' + CLASS.region) .data(config.regions) var g = mainRegion.enter().append('g') g.append('rect') .attr('x', $$.regionX.bind($$)) .attr('y', $$.regionY.bind($$)) .attr('width', $$.regionWidth.bind($$)) .attr('height', $$.regionHeight.bind($$)) .style('fill-opacity', function(d) { return isValue(d.opacity) ? d.opacity : 0.1 }) g.append('text').text($$.labelRegion.bind($$)) $$.mainRegion = g.merge(mainRegion).attr('class', $$.classRegion.bind($$)) mainRegion .exit() .transition() .duration(duration) .style('opacity', 0) .remove() } ChartInternal.prototype.redrawRegion = function(withTransition, transition) { var $$ = this, regions = $$.mainRegion, regionLabels = $$.mainRegion.selectAll('text') return [ (withTransition ? regions.transition(transition) : regions) .attr('x', $$.regionX.bind($$)) .attr('y', $$.regionY.bind($$)) .attr('width', $$.regionWidth.bind($$)) .attr('height', $$.regionHeight.bind($$)) .style('fill-opacity', function(d) { return isValue(d.opacity) ? d.opacity : 0.1 }), (withTransition ? regionLabels.transition(transition) : regionLabels) .attr('x', $$.labelOffsetX.bind($$)) .attr('y', $$.labelOffsetY.bind($$)) .attr('transform', $$.labelTransform.bind($$)) .attr('style', 'text-anchor: left;') ] } ChartInternal.prototype.regionX = function(d) { var $$ = this, config = $$.config, xPos, yScale = d.axis === 'y' ? $$.y : $$.y2 if (d.axis === 'y' || d.axis === 'y2') { xPos = config.axis_rotated ? ('start' in d ? yScale(d.start) : 0) : 0 } else { xPos = config.axis_rotated ? 0 : 'start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0 } return xPos } ChartInternal.prototype.regionY = function(d) { var $$ = this, config = $$.config, yPos, yScale = d.axis === 'y' ? $$.y : $$.y2 if (d.axis === 'y' || d.axis === 'y2') { yPos = config.axis_rotated ? 0 : 'end' in d ? yScale(d.end) : 0 } else { yPos = config.axis_rotated ? 'start' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.start) : d.start) : 0 : 0 } return yPos } ChartInternal.prototype.regionWidth = function(d) { var $$ = this, config = $$.config, start = $$.regionX(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2 if (d.axis === 'y' || d.axis === 'y2') { end = config.axis_rotated ? 'end' in d ? yScale(d.end) : $$.width : $$.width } else { end = config.axis_rotated ? $$.width : 'end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.width } return end < start ? 0 : end - start } ChartInternal.prototype.regionHeight = function(d) { var $$ = this, config = $$.config, start = this.regionY(d), end, yScale = d.axis === 'y' ? $$.y : $$.y2 if (d.axis === 'y' || d.axis === 'y2') { end = config.axis_rotated ? $$.height : 'start' in d ? yScale(d.start) : $$.height } else { end = config.axis_rotated ? 'end' in d ? $$.x($$.isTimeSeries() ? $$.parseDate(d.end) : d.end) : $$.height : $$.height } return end < start ? 0 : end - start } ChartInternal.prototype.isRegionOnX = function(d) { return !d.axis || d.axis === 'x' } ChartInternal.prototype.labelRegion = function(d) { return 'label' in d ? d.label : '' } ChartInternal.prototype.labelTransform = function(d) { return 'vertical' in d && d.vertical ? 'rotate(90)' : '' } ChartInternal.prototype.labelOffsetX = function(d) { var paddingX = 'paddingX' in d ? d.paddingX : 3 var paddingY = 'paddingY' in d ? d.paddingY : 3 return 'vertical' in d && d.vertical ? this.regionY(d) + paddingY : this.regionX(d) + paddingX } ChartInternal.prototype.labelOffsetY = function(d) { var paddingX = 'paddingX' in d ? d.paddingX : 3 var paddingY = 'paddingY' in d ? d.paddingY : 3 return 'vertical' in d && d.vertical ? -(this.regionX(d) + paddingX) : this.regionY(d) + 10 + paddingY }