From ed7396e9956607cea2b5a3812f0f4e57801b9b8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=86ndrew=20Rininsland?= Date: Wed, 14 Sep 2016 22:59:14 +0100 Subject: [PATCH] Moving Rollup config out of Gruntfile. --- .babelrc | 13 + Gruntfile.coffee | 27 +- c3.js | 9943 +++++++++------------------------------------- package.json | 10 +- rollup.config.js | 21 + 5 files changed, 1892 insertions(+), 8122 deletions(-) create mode 100644 .babelrc create mode 100644 rollup.config.js diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..fb890d2 --- /dev/null +++ b/.babelrc @@ -0,0 +1,13 @@ +{ + "presets": [ + [ + "es2015", + { + "modules": false + } + ] + ], + "plugins": [ + "external-helpers" + ] +} \ No newline at end of file diff --git a/Gruntfile.coffee b/Gruntfile.coffee index d4fd969..f5abaf9 100644 --- a/Gruntfile.coffee +++ b/Gruntfile.coffee @@ -1,24 +1,11 @@ module.exports = (grunt) -> - require('load-grunt-tasks') grunt, pattern: ['grunt-contrib-*', 'grunt-sass', 'grunt-karma', 'grunt-rollup'] + require('load-grunt-tasks') grunt, pattern: ['grunt-contrib-*', 'grunt-sass', 'grunt-karma'] grunt.initConfig - rollup: - options: - external: ['d3'] - format: "umd" - moduleName: "c3" - globals: - d3: 'd3' - - files: - src: 'es6_modules/rollup.entry.js' - dest: 'c3.es6.js' - - watch: concat: tasks: 'concat' @@ -136,7 +123,7 @@ module.exports = (grunt) -> src: [ 'src/head.js', - + 'src/axis/index.js', 'src/axis/c3.axis.js', 'src/axis/axis.js', @@ -175,7 +162,7 @@ module.exports = (grunt) -> 'src/chartinternal/transform.js', 'src/chartinternal/flow.js', 'src/chartinternal/ua.js', - + 'src/chart/index.js', 'src/chart/api.focus.js', 'src/chart/api.show.js', @@ -195,11 +182,11 @@ module.exports = (grunt) -> 'src/chart/api.legend.js', 'src/chart/api.chart.js', 'src/chart/api.tooltip.js', - - + + 'src/tail.js', 'src/polyfill.js' - + ] dest: 'c3.js' @@ -236,4 +223,4 @@ module.exports = (grunt) -> grunt.registerTask 'build', ['concat:dist', 'sass'] grunt.registerTask 'minify', ['cssmin', 'uglify'] grunt.registerTask 'default', ['lint', 'build', 'test', 'minify'] - grunt.registerTask 'build_rollup', ['concat:axis', 'concat:chart', 'concat:chartinternal','rollup'] \ No newline at end of file + grunt.registerTask 'build_modules', ['concat:axis', 'concat:chart', 'concat:chartinternal'] diff --git a/c3.js b/c3.js index 015d768..518b863 100644 --- a/c3.js +++ b/c3.js @@ -1,247 +1,323 @@ -/*global define, module, exports, require */ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('d3')) : - typeof define === 'function' && define.amd ? define(['d3'],factory) : - (global.c3 = factory(global.d3)); -}(this, function (d3) { - 'use strict'; - var c3 = { version: "0.4.11-rc4" }; - - function API(owner) { - this.owner = owner; - } + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3')) : + typeof define === 'function' && define.amd ? define(['exports', 'd3'], factory) : + (factory((global.c3 = global.c3 || {}),global.d3)); +}(this, (function (exports,d3) { 'use strict'; + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { + return typeof obj; +} : function (obj) { + return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + - function inherit(base, derived) { - if (Object.create) { - derived.prototype = Object.create(base.prototype); - } else { - var f = function f() {}; - f.prototype = base.prototype; - derived.prototype = new f(); - } - derived.prototype.constructor = derived; - return derived; + +var set = function set(object, property, value, receiver) { + var desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + var parent = Object.getPrototypeOf(object); + + if (parent !== null) { + set(parent, property, value, receiver); + } + } else if ("value" in desc && desc.writable) { + desc.value = value; + } else { + var setter = desc.set; + + if (setter !== undefined) { + setter.call(receiver, value); } + } - // Features: - // 1. category axis - // 2. ceil values of translate/x/y to int for half pixel antialiasing - // 3. multiline tick text - var tickTextCharSize; - function c3_axis(d3, params) { - var scale = d3.scale.linear(), orient = "bottom", innerTickSize = 6, outerTickSize, tickPadding = 3, tickValues = null, tickFormat, tickArguments; + return value; +}; - var tickOffset = 0, tickCulling = true, tickCentered; +function API(owner) { + this.owner = owner; +} - params = params || {}; - outerTickSize = params.withOuterTick ? 6 : 0; +function inherit(base, derived) { - function axisX(selection, x) { - selection.attr("transform", function (d) { - return "translate(" + Math.ceil(x(d) + tickOffset) + ", 0)"; - }); + if (Object.create) { + derived.prototype = Object.create(base.prototype); + } else { + var f = function f() {}; + f.prototype = base.prototype; + derived.prototype = new f(); + } + + derived.prototype.constructor = derived; + + return derived; +} + +// Features: +// 1. category axis +// 2. ceil values of translate/x/y to int for half pixel antialiasing +// 3. multiline tick text +var tickTextCharSize; +function c3_axis(d3$$1, params) { + var scale = d3$$1.scale.linear(), + orient = "bottom", + innerTickSize = 6, + outerTickSize, + tickPadding = 3, + tickValues = null, + tickFormat, + tickArguments; + + var tickOffset = 0, + tickCulling = true, + tickCentered; + + params = params || {}; + outerTickSize = params.withOuterTick ? 6 : 0; + + function axisX(selection, x) { + selection.attr("transform", function (d) { + return "translate(" + Math.ceil(x(d) + tickOffset) + ", 0)"; + }); + } + function axisY(selection, y) { + selection.attr("transform", function (d) { + return "translate(0," + Math.ceil(y(d)) + ")"; + }); + } + function scaleExtent(domain) { + var start = domain[0], + stop = domain[domain.length - 1]; + return start < stop ? [start, stop] : [stop, start]; + } + function generateTicks(scale) { + var i, + domain, + ticks = []; + if (scale.ticks) { + return scale.ticks.apply(scale, tickArguments); } - function axisY(selection, y) { - selection.attr("transform", function (d) { - return "translate(0," + Math.ceil(y(d)) + ")"; - }); + domain = scale.domain(); + for (i = Math.ceil(domain[0]); i < domain[1]; i++) { + ticks.push(i); } - function scaleExtent(domain) { - var start = domain[0], stop = domain[domain.length - 1]; - return start < stop ? [ start, stop ] : [ stop, start ]; + if (ticks.length > 0 && ticks[0] > 0) { + ticks.unshift(ticks[0] - (ticks[1] - ticks[0])); } - function generateTicks(scale) { - var i, domain, ticks = []; - if (scale.ticks) { - return scale.ticks.apply(scale, tickArguments); - } + return ticks; + } + function copyScale() { + var newScale = scale.copy(), + domain; + if (params.isCategory) { domain = scale.domain(); - for (i = Math.ceil(domain[0]); i < domain[1]; i++) { - ticks.push(i); - } - if (ticks.length > 0 && ticks[0] > 0) { - ticks.unshift(ticks[0] - (ticks[1] - ticks[0])); - } - return ticks; - } - function copyScale() { - var newScale = scale.copy(), domain; - if (params.isCategory) { - domain = scale.domain(); - newScale.domain([domain[0], domain[1] - 1]); - } - return newScale; + newScale.domain([domain[0], domain[1] - 1]); } - function textFormatted(v) { - var formatted = tickFormat ? tickFormat(v) : v; - return typeof formatted !== 'undefined' ? formatted : ''; + return newScale; + } + function textFormatted(v) { + var formatted = tickFormat ? tickFormat(v) : v; + return typeof formatted !== 'undefined' ? formatted : ''; + } + function getSizeFor1Char(tick) { + if (tickTextCharSize) { + return tickTextCharSize; } - function getSizeFor1Char(tick) { - if (tickTextCharSize) { - return tickTextCharSize; + var size = { + h: 11.5, + w: 5.5 + }; + tick.select('text').text(textFormatted).each(function (d) { + var box = this.getBoundingClientRect(), + text = textFormatted(d), + h = box.height, + w = text ? box.width / text.length : undefined; + if (h && w) { + size.h = h; + size.w = w; + } + }).text(''); + tickTextCharSize = size; + return size; + } + function transitionise(selection) { + return params.withoutTransition ? selection : d3$$1.transition(selection); + } + function axis(g) { + g.each(function () { + var g = axis.g = d3$$1.select(this); + + var scale0 = this.__chart__ || scale, + scale1 = this.__chart__ = copyScale(); + + var ticks = tickValues ? tickValues : generateTicks(scale1), + tick = g.selectAll(".tick").data(ticks, scale1), + tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", 1e-6), + + // MEMO: No exit transition. The reason is this transition affects max tick width calculation because old tick will be included in the ticks. + tickExit = tick.exit().remove(), + tickUpdate = transitionise(tick).style("opacity", 1), + tickTransform, + tickX, + tickY; + + var range = scale.rangeExtent ? scale.rangeExtent() : scaleExtent(scale.range()), + path = g.selectAll(".domain").data([0]), + pathUpdate = (path.enter().append("path").attr("class", "domain"), transitionise(path)); + tickEnter.append("line"); + tickEnter.append("text"); + + var lineEnter = tickEnter.select("line"), + lineUpdate = tickUpdate.select("line"), + textEnter = tickEnter.select("text"), + textUpdate = tickUpdate.select("text"); + + if (params.isCategory) { + tickOffset = Math.ceil((scale1(1) - scale1(0)) / 2); + tickX = tickCentered ? 0 : tickOffset; + tickY = tickCentered ? tickOffset : 0; + } else { + tickOffset = tickX = 0; } - var size = { - h: 11.5, - w: 5.5 - }; - tick.select('text').text(textFormatted).each(function (d) { - var box = this.getBoundingClientRect(), - text = textFormatted(d), - h = box.height, - w = text ? (box.width / text.length) : undefined; - if (h && w) { - size.h = h; - size.w = w; - } - }).text(''); - tickTextCharSize = size; - return size; - } - function transitionise(selection) { - return params.withoutTransition ? selection : d3.transition(selection); - } - function axis(g) { - g.each(function () { - var g = axis.g = d3.select(this); - - var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = copyScale(); - - var ticks = tickValues ? tickValues : generateTicks(scale1), - tick = g.selectAll(".tick").data(ticks, scale1), - tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", 1e-6), - // MEMO: No exit transition. The reason is this transition affects max tick width calculation because old tick will be included in the ticks. - tickExit = tick.exit().remove(), - tickUpdate = transitionise(tick).style("opacity", 1), - tickTransform, tickX, tickY; - - var range = scale.rangeExtent ? scale.rangeExtent() : scaleExtent(scale.range()), - path = g.selectAll(".domain").data([ 0 ]), - pathUpdate = (path.enter().append("path").attr("class", "domain"), transitionise(path)); - tickEnter.append("line"); - tickEnter.append("text"); - - var lineEnter = tickEnter.select("line"), - lineUpdate = tickUpdate.select("line"), - textEnter = tickEnter.select("text"), - textUpdate = tickUpdate.select("text"); - - if (params.isCategory) { - tickOffset = Math.ceil((scale1(1) - scale1(0)) / 2); - tickX = tickCentered ? 0 : tickOffset; - tickY = tickCentered ? tickOffset : 0; - } else { - tickOffset = tickX = 0; - } - var text, tspan, sizeFor1Char = getSizeFor1Char(g.select('.tick')), counts = []; - var tickLength = Math.max(innerTickSize, 0) + tickPadding, - isVertical = orient === 'left' || orient === 'right'; + var text, + tspan, + sizeFor1Char = getSizeFor1Char(g.select('.tick')), + counts = []; + var tickLength = Math.max(innerTickSize, 0) + tickPadding, + isVertical = orient === 'left' || orient === 'right'; - // this should be called only when category axis - function splitTickText(d, maxWidth) { - var tickText = textFormatted(d), - subtext, spaceIndex, textWidth, splitted = []; + // this should be called only when category axis + function splitTickText(d, maxWidth) { + var tickText = textFormatted(d), + subtext, + spaceIndex, + textWidth, + splitted = []; - if (Object.prototype.toString.call(tickText) === "[object Array]") { - return tickText; - } + if (Object.prototype.toString.call(tickText) === "[object Array]") { + return tickText; + } - if (!maxWidth || maxWidth <= 0) { - maxWidth = isVertical ? 95 : params.isCategory ? (Math.ceil(scale1(ticks[1]) - scale1(ticks[0])) - 12) : 110; - } + if (!maxWidth || maxWidth <= 0) { + maxWidth = isVertical ? 95 : params.isCategory ? Math.ceil(scale1(ticks[1]) - scale1(ticks[0])) - 12 : 110; + } - function split(splitted, text) { - spaceIndex = undefined; - for (var i = 1; i < text.length; i++) { - if (text.charAt(i) === ' ') { - spaceIndex = i; - } - subtext = text.substr(0, i + 1); - textWidth = sizeFor1Char.w * subtext.length; - // if text width gets over tick width, split by space index or crrent index - if (maxWidth < textWidth) { - return split( - splitted.concat(text.substr(0, spaceIndex ? spaceIndex : i)), - text.slice(spaceIndex ? spaceIndex + 1 : i) - ); - } + function split(splitted, text) { + spaceIndex = undefined; + for (var i = 1; i < text.length; i++) { + if (text.charAt(i) === ' ') { + spaceIndex = i; + } + subtext = text.substr(0, i + 1); + textWidth = sizeFor1Char.w * subtext.length; + // if text width gets over tick width, split by space index or crrent index + if (maxWidth < textWidth) { + return split(splitted.concat(text.substr(0, spaceIndex ? spaceIndex : i)), text.slice(spaceIndex ? spaceIndex + 1 : i)); } - return splitted.concat(text); } - - return split(splitted, tickText + ""); + return splitted.concat(text); } - function tspanDy(d, i) { - var dy = sizeFor1Char.h; - if (i === 0) { - if (orient === 'left' || orient === 'right') { - dy = -((counts[d.index] - 1) * (sizeFor1Char.h / 2) - 3); - } else { - dy = ".71em"; - } + return split(splitted, tickText + ""); + } + + function tspanDy(d, i) { + var dy = sizeFor1Char.h; + if (i === 0) { + if (orient === 'left' || orient === 'right') { + dy = -((counts[d.index] - 1) * (sizeFor1Char.h / 2) - 3); + } else { + dy = ".71em"; } - return dy; } + return dy; + } - function tickSize(d) { - var tickPosition = scale(d) + (tickCentered ? 0 : tickOffset); - return range[0] < tickPosition && tickPosition < range[1] ? innerTickSize : 0; - } + function tickSize(d) { + var tickPosition = scale(d) + (tickCentered ? 0 : tickOffset); + return range[0] < tickPosition && tickPosition < range[1] ? innerTickSize : 0; + } - text = tick.select("text"); - tspan = text.selectAll('tspan') - .data(function (d, i) { - var splitted = params.tickMultiline ? splitTickText(d, params.tickWidth) : [].concat(textFormatted(d)); - counts[i] = splitted.length; - return splitted.map(function (s) { - return { index: i, splitted: s }; - }); - }); - tspan.enter().append('tspan'); - tspan.exit().remove(); - tspan.text(function (d) { return d.splitted; }); + text = tick.select("text"); + tspan = text.selectAll('tspan').data(function (d, i) { + var splitted = params.tickMultiline ? splitTickText(d, params.tickWidth) : [].concat(textFormatted(d)); + counts[i] = splitted.length; + return splitted.map(function (s) { + return { index: i, splitted: s }; + }); + }); + tspan.enter().append('tspan'); + tspan.exit().remove(); + tspan.text(function (d) { + return d.splitted; + }); - var rotate = params.tickTextRotate; + var rotate = params.tickTextRotate; - function textAnchorForText(rotate) { - if (!rotate) { - return 'middle'; - } - return rotate > 0 ? "start" : "end"; + function textAnchorForText(rotate) { + if (!rotate) { + return 'middle'; } - function textTransform(rotate) { - if (!rotate) { - return ''; - } - return "rotate(" + rotate + ")"; + return rotate > 0 ? "start" : "end"; + } + function textTransform(rotate) { + if (!rotate) { + return ''; } - function dxForText(rotate) { - if (!rotate) { - return 0; - } - return 8 * Math.sin(Math.PI * (rotate / 180)); + return "rotate(" + rotate + ")"; + } + function dxForText(rotate) { + if (!rotate) { + return 0; } - function yForText(rotate) { - if (!rotate) { - return tickLength; - } - return 11.5 - 2.5 * (rotate / 15) * (rotate > 0 ? 1 : -1); + return 8 * Math.sin(Math.PI * (rotate / 180)); + } + function yForText(rotate) { + if (!rotate) { + return tickLength; } + return 11.5 - 2.5 * (rotate / 15) * (rotate > 0 ? 1 : -1); + } - switch (orient) { + switch (orient) { case "bottom": { tickTransform = axisX; lineEnter.attr("y2", innerTickSize); textEnter.attr("y", tickLength); lineUpdate.attr("x1", tickX).attr("x2", tickX).attr("y2", tickSize); - textUpdate.attr("x", 0).attr("y", yForText(rotate)) - .style("text-anchor", textAnchorForText(rotate)) - .attr("transform", textTransform(rotate)); + textUpdate.attr("x", 0).attr("y", yForText(rotate)).style("text-anchor", textAnchorForText(rotate)).attr("transform", textTransform(rotate)); tspan.attr('x', 0).attr("dy", tspanDy).attr('dx', dxForText(rotate)); pathUpdate.attr("d", "M" + range[0] + "," + outerTickSize + "V0H" + range[1] + "V" + outerTickSize); break; @@ -283,8027 +359,1696 @@ pathUpdate.attr("d", "M" + outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + outerTickSize); break; } - } - if (scale1.rangeBand) { - var x = scale1, dx = x.rangeBand() / 2; - scale0 = scale1 = function (d) { - return x(d) + dx; - }; - } else if (scale0.rangeBand) { - scale0 = scale1; - } else { - tickExit.call(tickTransform, scale1); - } - tickEnter.call(tickTransform, scale0); - tickUpdate.call(tickTransform, scale1); - }); - } - axis.scale = function (x) { - if (!arguments.length) { return scale; } - scale = x; - return axis; - }; - axis.orient = function (x) { - if (!arguments.length) { return orient; } - orient = x in {top: 1, right: 1, bottom: 1, left: 1} ? x + "" : "bottom"; - return axis; - }; - axis.tickFormat = function (format) { - if (!arguments.length) { return tickFormat; } - tickFormat = format; - return axis; - }; - axis.tickCentered = function (isCentered) { - if (!arguments.length) { return tickCentered; } - tickCentered = isCentered; - return axis; - }; - axis.tickOffset = function () { - return tickOffset; - }; - axis.tickInterval = function () { - var interval, length; - if (params.isCategory) { - interval = tickOffset * 2; - } - else { - length = axis.g.select('path.domain').node().getTotalLength() - outerTickSize * 2; - interval = length / axis.g.selectAll('line').size(); } - return interval === Infinity ? 0 : interval; - }; - axis.ticks = function () { - if (!arguments.length) { return tickArguments; } - tickArguments = arguments; - return axis; - }; - axis.tickCulling = function (culling) { - if (!arguments.length) { return tickCulling; } - tickCulling = culling; - return axis; - }; - axis.tickValues = function (x) { - if (typeof x === 'function') { - tickValues = function () { - return x(scale.domain()); + if (scale1.rangeBand) { + var x = scale1, + dx = x.rangeBand() / 2; + scale0 = scale1 = function scale1(d) { + return x(d) + dx; }; + } else if (scale0.rangeBand) { + scale0 = scale1; + } else { + tickExit.call(tickTransform, scale1); } - else { - if (!arguments.length) { return tickValues; } - tickValues = x; - } - return axis; - }; - return axis; - } - - function Axis(owner) { - API.call(this, owner); + tickEnter.call(tickTransform, scale0); + tickUpdate.call(tickTransform, scale1); + }); } - - inherit(API, Axis); - - Axis.prototype.init = function init() { - - var $$ = this.owner, config = $$.config, main = $$.main; - $$.axes.x = main.append("g") - .attr("class", CLASS.axis + ' ' + CLASS.axisX) - .attr("clip-path", $$.clipPathForXAxis) - .attr("transform", $$.getTranslate('x')) - .style("visibility", config.axis_x_show ? 'visible' : 'hidden'); - $$.axes.x.append("text") - .attr("class", CLASS.axisXLabel) - .attr("transform", config.axis_rotated ? "rotate(-90)" : "") - .style("text-anchor", this.textAnchorForXAxisLabel.bind(this)); - $$.axes.y = main.append("g") - .attr("class", CLASS.axis + ' ' + CLASS.axisY) - .attr("clip-path", config.axis_y_inner ? "" : $$.clipPathForYAxis) - .attr("transform", $$.getTranslate('y')) - .style("visibility", config.axis_y_show ? 'visible' : 'hidden'); - $$.axes.y.append("text") - .attr("class", CLASS.axisYLabel) - .attr("transform", config.axis_rotated ? "" : "rotate(-90)") - .style("text-anchor", this.textAnchorForYAxisLabel.bind(this)); - - $$.axes.y2 = main.append("g") - .attr("class", CLASS.axis + ' ' + CLASS.axisY2) - // clip-path? - .attr("transform", $$.getTranslate('y2')) - .style("visibility", config.axis_y2_show ? 'visible' : 'hidden'); - $$.axes.y2.append("text") - .attr("class", CLASS.axisY2Label) - .attr("transform", config.axis_rotated ? "" : "rotate(-90)") - .style("text-anchor", this.textAnchorForY2AxisLabel.bind(this)); - }; - Axis.prototype.getXAxis = function getXAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) { - var $$ = this.owner, config = $$.config, - axisParams = { - isCategory: $$.isCategorized(), - withOuterTick: withOuterTick, - tickMultiline: config.axis_x_tick_multiline, - tickWidth: config.axis_x_tick_width, - tickTextRotate: withoutRotateTickText ? 0 : config.axis_x_tick_rotate, - withoutTransition: withoutTransition, - }, - axis = c3_axis($$.d3, axisParams).scale(scale).orient(orient); - - if ($$.isTimeSeries() && tickValues && typeof tickValues !== "function") { - tickValues = tickValues.map(function (v) { return $$.parseDate(v); }); - } - - // Set tick - axis.tickFormat(tickFormat).tickValues(tickValues); - if ($$.isCategorized()) { - axis.tickCentered(config.axis_x_tick_centered); - if (isEmpty(config.axis_x_tick_culling)) { - config.axis_x_tick_culling = false; - } + axis.scale = function (x) { + if (!arguments.length) { + return scale; } - + scale = x; return axis; }; - Axis.prototype.updateXAxisTickValues = function updateXAxisTickValues(targets, axis) { - var $$ = this.owner, config = $$.config, tickValues; - if (config.axis_x_tick_fit || config.axis_x_tick_count) { - tickValues = this.generateTickValues($$.mapTargetsToUniqueXs(targets), config.axis_x_tick_count, $$.isTimeSeries()); - } - if (axis) { - axis.tickValues(tickValues); - } else { - $$.xAxis.tickValues(tickValues); - $$.subXAxis.tickValues(tickValues); - } - return tickValues; - }; - Axis.prototype.getYAxis = function getYAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) { - var $$ = this.owner, config = $$.config, - axisParams = { - withOuterTick: withOuterTick, - withoutTransition: withoutTransition, - tickTextRotate: withoutRotateTickText ? 0 : config.axis_y_tick_rotate - }, - axis = c3_axis($$.d3, axisParams).scale(scale).orient(orient).tickFormat(tickFormat); - if ($$.isTimeSeriesY()) { - axis.ticks($$.d3.time[config.axis_y_tick_time_value], config.axis_y_tick_time_interval); - } else { - axis.tickValues(tickValues); + axis.orient = function (x) { + if (!arguments.length) { + return orient; } + orient = x in { top: 1, right: 1, bottom: 1, left: 1 } ? x + "" : "bottom"; return axis; }; - Axis.prototype.getId = function getId(id) { - var config = this.owner.config; - return id in config.data_axes ? config.data_axes[id] : 'y'; - }; - Axis.prototype.getXAxisTickFormat = function getXAxisTickFormat() { - var $$ = this.owner, config = $$.config, - format = $$.isTimeSeries() ? $$.defaultAxisTimeFormat : $$.isCategorized() ? $$.categoryName : function (v) { return v < 0 ? v.toFixed(0) : v; }; - if (config.axis_x_tick_format) { - if (isFunction(config.axis_x_tick_format)) { - format = config.axis_x_tick_format; - } else if ($$.isTimeSeries()) { - format = function (date) { - return date ? $$.axisTimeFormat(config.axis_x_tick_format)(date) : ""; - }; - } - } - return isFunction(format) ? function (v) { return format.call($$, v); } : format; - }; - Axis.prototype.getTickValues = function getTickValues(tickValues, axis) { - return tickValues ? tickValues : axis ? axis.tickValues() : undefined; - }; - Axis.prototype.getXAxisTickValues = function getXAxisTickValues() { - return this.getTickValues(this.owner.config.axis_x_tick_values, this.owner.xAxis); - }; - Axis.prototype.getYAxisTickValues = function getYAxisTickValues() { - return this.getTickValues(this.owner.config.axis_y_tick_values, this.owner.yAxis); - }; - Axis.prototype.getY2AxisTickValues = function getY2AxisTickValues() { - return this.getTickValues(this.owner.config.axis_y2_tick_values, this.owner.y2Axis); - }; - Axis.prototype.getLabelOptionByAxisId = function getLabelOptionByAxisId(axisId) { - var $$ = this.owner, config = $$.config, option; - if (axisId === 'y') { - option = config.axis_y_label; - } else if (axisId === 'y2') { - option = config.axis_y2_label; - } else if (axisId === 'x') { - option = config.axis_x_label; + axis.tickFormat = function (format) { + if (!arguments.length) { + return tickFormat; } - return option; - }; - Axis.prototype.getLabelText = function getLabelText(axisId) { - var option = this.getLabelOptionByAxisId(axisId); - return isString(option) ? option : option ? option.text : null; + tickFormat = format; + return axis; }; - Axis.prototype.setLabelText = function setLabelText(axisId, text) { - var $$ = this.owner, config = $$.config, - option = this.getLabelOptionByAxisId(axisId); - if (isString(option)) { - if (axisId === 'y') { - config.axis_y_label = text; - } else if (axisId === 'y2') { - config.axis_y2_label = text; - } else if (axisId === 'x') { - config.axis_x_label = text; - } - } else if (option) { - option.text = text; + axis.tickCentered = function (isCentered) { + if (!arguments.length) { + return tickCentered; } + tickCentered = isCentered; + return axis; }; - Axis.prototype.getLabelPosition = function getLabelPosition(axisId, defaultPosition) { - var option = this.getLabelOptionByAxisId(axisId), - position = (option && typeof option === 'object' && option.position) ? option.position : defaultPosition; - return { - isInner: position.indexOf('inner') >= 0, - isOuter: position.indexOf('outer') >= 0, - isLeft: position.indexOf('left') >= 0, - isCenter: position.indexOf('center') >= 0, - isRight: position.indexOf('right') >= 0, - isTop: position.indexOf('top') >= 0, - isMiddle: position.indexOf('middle') >= 0, - isBottom: position.indexOf('bottom') >= 0 - }; - }; - Axis.prototype.getXAxisLabelPosition = function getXAxisLabelPosition() { - return this.getLabelPosition('x', this.owner.config.axis_rotated ? 'inner-top' : 'inner-right'); - }; - Axis.prototype.getYAxisLabelPosition = function getYAxisLabelPosition() { - return this.getLabelPosition('y', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top'); - }; - Axis.prototype.getY2AxisLabelPosition = function getY2AxisLabelPosition() { - return this.getLabelPosition('y2', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top'); - }; - Axis.prototype.getLabelPositionById = function getLabelPositionById(id) { - return id === 'y2' ? this.getY2AxisLabelPosition() : id === 'y' ? this.getYAxisLabelPosition() : this.getXAxisLabelPosition(); - }; - Axis.prototype.textForXAxisLabel = function textForXAxisLabel() { - return this.getLabelText('x'); - }; - Axis.prototype.textForYAxisLabel = function textForYAxisLabel() { - return this.getLabelText('y'); - }; - Axis.prototype.textForY2AxisLabel = function textForY2AxisLabel() { - return this.getLabelText('y2'); - }; - Axis.prototype.xForAxisLabel = function xForAxisLabel(forHorizontal, position) { - var $$ = this.owner; - if (forHorizontal) { - return position.isLeft ? 0 : position.isCenter ? $$.width / 2 : $$.width; - } else { - return position.isBottom ? -$$.height : position.isMiddle ? -$$.height / 2 : 0; - } + axis.tickOffset = function () { + return tickOffset; }; - Axis.prototype.dxForAxisLabel = function dxForAxisLabel(forHorizontal, position) { - if (forHorizontal) { - return position.isLeft ? "0.5em" : position.isRight ? "-0.5em" : "0"; + axis.tickInterval = function () { + var interval, length; + if (params.isCategory) { + interval = tickOffset * 2; } else { - return position.isTop ? "-0.5em" : position.isBottom ? "0.5em" : "0"; + length = axis.g.select('path.domain').node().getTotalLength() - outerTickSize * 2; + interval = length / axis.g.selectAll('line').size(); } + return interval === Infinity ? 0 : interval; }; - Axis.prototype.textAnchorForAxisLabel = function textAnchorForAxisLabel(forHorizontal, position) { - if (forHorizontal) { - return position.isLeft ? 'start' : position.isCenter ? 'middle' : 'end'; - } else { - return position.isBottom ? 'start' : position.isMiddle ? 'middle' : 'end'; + axis.ticks = function () { + if (!arguments.length) { + return tickArguments; } + tickArguments = arguments; + return axis; }; - Axis.prototype.xForXAxisLabel = function xForXAxisLabel() { - return this.xForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition()); - }; - Axis.prototype.xForYAxisLabel = function xForYAxisLabel() { - return this.xForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition()); - }; - Axis.prototype.xForY2AxisLabel = function xForY2AxisLabel() { - return this.xForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition()); - }; - Axis.prototype.dxForXAxisLabel = function dxForXAxisLabel() { - return this.dxForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition()); - }; - Axis.prototype.dxForYAxisLabel = function dxForYAxisLabel() { - return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition()); - }; - Axis.prototype.dxForY2AxisLabel = function dxForY2AxisLabel() { - return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition()); - }; - Axis.prototype.dyForXAxisLabel = function dyForXAxisLabel() { - var $$ = this.owner, config = $$.config, - position = this.getXAxisLabelPosition(); - if (config.axis_rotated) { - return position.isInner ? "1.2em" : -25 - this.getMaxTickWidth('x'); - } else { - return position.isInner ? "-0.5em" : config.axis_x_height ? config.axis_x_height - 10 : "3em"; + axis.tickCulling = function (culling) { + if (!arguments.length) { + return tickCulling; } + tickCulling = culling; + return axis; }; - Axis.prototype.dyForYAxisLabel = function dyForYAxisLabel() { - var $$ = this.owner, - position = this.getYAxisLabelPosition(); - if ($$.config.axis_rotated) { - return position.isInner ? "-0.5em" : "3em"; + axis.tickValues = function (x) { + if (typeof x === 'function') { + tickValues = function tickValues() { + return x(scale.domain()); + }; } else { - return position.isInner ? "1.2em" : -10 - ($$.config.axis_y_inner ? 0 : (this.getMaxTickWidth('y') + 10)); + if (!arguments.length) { + return tickValues; + } + tickValues = x; } + return axis; }; - Axis.prototype.dyForY2AxisLabel = function dyForY2AxisLabel() { - var $$ = this.owner, - position = this.getY2AxisLabelPosition(); - if ($$.config.axis_rotated) { - return position.isInner ? "1.2em" : "-2.2em"; - } else { - return position.isInner ? "-0.5em" : 15 + ($$.config.axis_y2_inner ? 0 : (this.getMaxTickWidth('y2') + 15)); + return axis; +} + +function Axis(owner) { + API.call(this, owner); +} + +inherit(API, Axis); + +Axis.prototype.init = function init() { + + var $$ = this.owner, + config = $$.config, + main = $$.main; + $$.axes.x = main.append("g").attr("class", CLASS.axis + ' ' + CLASS.axisX).attr("clip-path", $$.clipPathForXAxis).attr("transform", $$.getTranslate('x')).style("visibility", config.axis_x_show ? 'visible' : 'hidden'); + $$.axes.x.append("text").attr("class", CLASS.axisXLabel).attr("transform", config.axis_rotated ? "rotate(-90)" : "").style("text-anchor", this.textAnchorForXAxisLabel.bind(this)); + $$.axes.y = main.append("g").attr("class", CLASS.axis + ' ' + CLASS.axisY).attr("clip-path", config.axis_y_inner ? "" : $$.clipPathForYAxis).attr("transform", $$.getTranslate('y')).style("visibility", config.axis_y_show ? 'visible' : 'hidden'); + $$.axes.y.append("text").attr("class", CLASS.axisYLabel).attr("transform", config.axis_rotated ? "" : "rotate(-90)").style("text-anchor", this.textAnchorForYAxisLabel.bind(this)); + + $$.axes.y2 = main.append("g").attr("class", CLASS.axis + ' ' + CLASS.axisY2) + // clip-path? + .attr("transform", $$.getTranslate('y2')).style("visibility", config.axis_y2_show ? 'visible' : 'hidden'); + $$.axes.y2.append("text").attr("class", CLASS.axisY2Label).attr("transform", config.axis_rotated ? "" : "rotate(-90)").style("text-anchor", this.textAnchorForY2AxisLabel.bind(this)); +}; +Axis.prototype.getXAxis = function getXAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) { + var $$ = this.owner, + config = $$.config, + axisParams = { + isCategory: $$.isCategorized(), + withOuterTick: withOuterTick, + tickMultiline: config.axis_x_tick_multiline, + tickWidth: config.axis_x_tick_width, + tickTextRotate: withoutRotateTickText ? 0 : config.axis_x_tick_rotate, + withoutTransition: withoutTransition + }, + axis = c3_axis($$.d3, axisParams).scale(scale).orient(orient); + + if ($$.isTimeSeries() && tickValues && typeof tickValues !== "function") { + tickValues = tickValues.map(function (v) { + return $$.parseDate(v); + }); + } + + // Set tick + axis.tickFormat(tickFormat).tickValues(tickValues); + if ($$.isCategorized()) { + axis.tickCentered(config.axis_x_tick_centered); + if (isEmpty(config.axis_x_tick_culling)) { + config.axis_x_tick_culling = false; } - }; - Axis.prototype.textAnchorForXAxisLabel = function textAnchorForXAxisLabel() { - var $$ = this.owner; - return this.textAnchorForAxisLabel(!$$.config.axis_rotated, this.getXAxisLabelPosition()); - }; - Axis.prototype.textAnchorForYAxisLabel = function textAnchorForYAxisLabel() { - var $$ = this.owner; - return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getYAxisLabelPosition()); - }; - Axis.prototype.textAnchorForY2AxisLabel = function textAnchorForY2AxisLabel() { - var $$ = this.owner; - return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getY2AxisLabelPosition()); - }; - Axis.prototype.getMaxTickWidth = function getMaxTickWidth(id, withoutRecompute) { - var $$ = this.owner, config = $$.config, - maxWidth = 0, targetsToShow, scale, axis, dummy, svg; - if (withoutRecompute && $$.currentMaxTickWidths[id]) { - return $$.currentMaxTickWidths[id]; + } + + return axis; +}; +Axis.prototype.updateXAxisTickValues = function updateXAxisTickValues(targets, axis) { + var $$ = this.owner, + config = $$.config, + tickValues; + if (config.axis_x_tick_fit || config.axis_x_tick_count) { + tickValues = this.generateTickValues($$.mapTargetsToUniqueXs(targets), config.axis_x_tick_count, $$.isTimeSeries()); + } + if (axis) { + axis.tickValues(tickValues); + } else { + $$.xAxis.tickValues(tickValues); + $$.subXAxis.tickValues(tickValues); + } + return tickValues; +}; +Axis.prototype.getYAxis = function getYAxis(scale, orient, tickFormat, tickValues, withOuterTick, withoutTransition, withoutRotateTickText) { + var $$ = this.owner, + config = $$.config, + axisParams = { + withOuterTick: withOuterTick, + withoutTransition: withoutTransition, + tickTextRotate: withoutRotateTickText ? 0 : config.axis_y_tick_rotate + }, + axis = c3_axis($$.d3, axisParams).scale(scale).orient(orient).tickFormat(tickFormat); + if ($$.isTimeSeriesY()) { + axis.ticks($$.d3.time[config.axis_y_tick_time_value], config.axis_y_tick_time_interval); + } else { + axis.tickValues(tickValues); + } + return axis; +}; +Axis.prototype.getId = function getId(id) { + var config = this.owner.config; + return id in config.data_axes ? config.data_axes[id] : 'y'; +}; +Axis.prototype.getXAxisTickFormat = function getXAxisTickFormat() { + var $$ = this.owner, + config = $$.config, + format = $$.isTimeSeries() ? $$.defaultAxisTimeFormat : $$.isCategorized() ? $$.categoryName : function (v) { + return v < 0 ? v.toFixed(0) : v; + }; + if (config.axis_x_tick_format) { + if (isFunction(config.axis_x_tick_format)) { + format = config.axis_x_tick_format; + } else if ($$.isTimeSeries()) { + format = function format(date) { + return date ? $$.axisTimeFormat(config.axis_x_tick_format)(date) : ""; + }; } - if ($$.svg) { - targetsToShow = $$.filterTargetsToShow($$.data.targets); - if (id === 'y') { - scale = $$.y.copy().domain($$.getYDomain(targetsToShow, 'y')); - axis = this.getYAxis(scale, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues, false, true, true); - } else if (id === 'y2') { - scale = $$.y2.copy().domain($$.getYDomain(targetsToShow, 'y2')); - axis = this.getYAxis(scale, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues, false, true, true); - } else { - scale = $$.x.copy().domain($$.getXDomain(targetsToShow)); - axis = this.getXAxis(scale, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, false, true, true); - this.updateXAxisTickValues(targetsToShow, axis); - } - dummy = $$.d3.select('body').append('div').classed('c3', true); - svg = dummy.append("svg").style('visibility', 'hidden').style('position', 'fixed').style('top', 0).style('left', 0), - svg.append('g').call(axis).each(function () { - $$.d3.select(this).selectAll('text').each(function () { - var box = this.getBoundingClientRect(); - if (maxWidth < box.width) { maxWidth = box.width; } - }); - dummy.remove(); - }); + } + return isFunction(format) ? function (v) { + return format.call($$, v); + } : format; +}; +Axis.prototype.getTickValues = function getTickValues(tickValues, axis) { + return tickValues ? tickValues : axis ? axis.tickValues() : undefined; +}; +Axis.prototype.getXAxisTickValues = function getXAxisTickValues() { + return this.getTickValues(this.owner.config.axis_x_tick_values, this.owner.xAxis); +}; +Axis.prototype.getYAxisTickValues = function getYAxisTickValues() { + return this.getTickValues(this.owner.config.axis_y_tick_values, this.owner.yAxis); +}; +Axis.prototype.getY2AxisTickValues = function getY2AxisTickValues() { + return this.getTickValues(this.owner.config.axis_y2_tick_values, this.owner.y2Axis); +}; +Axis.prototype.getLabelOptionByAxisId = function getLabelOptionByAxisId(axisId) { + var $$ = this.owner, + config = $$.config, + option; + if (axisId === 'y') { + option = config.axis_y_label; + } else if (axisId === 'y2') { + option = config.axis_y2_label; + } else if (axisId === 'x') { + option = config.axis_x_label; + } + return option; +}; +Axis.prototype.getLabelText = function getLabelText(axisId) { + var option = this.getLabelOptionByAxisId(axisId); + return isString(option) ? option : option ? option.text : null; +}; +Axis.prototype.setLabelText = function setLabelText(axisId, text) { + var $$ = this.owner, + config = $$.config, + option = this.getLabelOptionByAxisId(axisId); + if (isString(option)) { + if (axisId === 'y') { + config.axis_y_label = text; + } else if (axisId === 'y2') { + config.axis_y2_label = text; + } else if (axisId === 'x') { + config.axis_x_label = text; } - $$.currentMaxTickWidths[id] = maxWidth <= 0 ? $$.currentMaxTickWidths[id] : maxWidth; + } else if (option) { + option.text = text; + } +}; +Axis.prototype.getLabelPosition = function getLabelPosition(axisId, defaultPosition) { + var option = this.getLabelOptionByAxisId(axisId), + position = option && (typeof option === "undefined" ? "undefined" : _typeof(option)) === 'object' && option.position ? option.position : defaultPosition; + return { + isInner: position.indexOf('inner') >= 0, + isOuter: position.indexOf('outer') >= 0, + isLeft: position.indexOf('left') >= 0, + isCenter: position.indexOf('center') >= 0, + isRight: position.indexOf('right') >= 0, + isTop: position.indexOf('top') >= 0, + isMiddle: position.indexOf('middle') >= 0, + isBottom: position.indexOf('bottom') >= 0 + }; +}; +Axis.prototype.getXAxisLabelPosition = function getXAxisLabelPosition() { + return this.getLabelPosition('x', this.owner.config.axis_rotated ? 'inner-top' : 'inner-right'); +}; +Axis.prototype.getYAxisLabelPosition = function getYAxisLabelPosition() { + return this.getLabelPosition('y', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top'); +}; +Axis.prototype.getY2AxisLabelPosition = function getY2AxisLabelPosition() { + return this.getLabelPosition('y2', this.owner.config.axis_rotated ? 'inner-right' : 'inner-top'); +}; +Axis.prototype.getLabelPositionById = function getLabelPositionById(id) { + return id === 'y2' ? this.getY2AxisLabelPosition() : id === 'y' ? this.getYAxisLabelPosition() : this.getXAxisLabelPosition(); +}; +Axis.prototype.textForXAxisLabel = function textForXAxisLabel() { + return this.getLabelText('x'); +}; +Axis.prototype.textForYAxisLabel = function textForYAxisLabel() { + return this.getLabelText('y'); +}; +Axis.prototype.textForY2AxisLabel = function textForY2AxisLabel() { + return this.getLabelText('y2'); +}; +Axis.prototype.xForAxisLabel = function xForAxisLabel(forHorizontal, position) { + var $$ = this.owner; + if (forHorizontal) { + return position.isLeft ? 0 : position.isCenter ? $$.width / 2 : $$.width; + } else { + return position.isBottom ? -$$.height : position.isMiddle ? -$$.height / 2 : 0; + } +}; +Axis.prototype.dxForAxisLabel = function dxForAxisLabel(forHorizontal, position) { + if (forHorizontal) { + return position.isLeft ? "0.5em" : position.isRight ? "-0.5em" : "0"; + } else { + return position.isTop ? "-0.5em" : position.isBottom ? "0.5em" : "0"; + } +}; +Axis.prototype.textAnchorForAxisLabel = function textAnchorForAxisLabel(forHorizontal, position) { + if (forHorizontal) { + return position.isLeft ? 'start' : position.isCenter ? 'middle' : 'end'; + } else { + return position.isBottom ? 'start' : position.isMiddle ? 'middle' : 'end'; + } +}; +Axis.prototype.xForXAxisLabel = function xForXAxisLabel() { + return this.xForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition()); +}; +Axis.prototype.xForYAxisLabel = function xForYAxisLabel() { + return this.xForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition()); +}; +Axis.prototype.xForY2AxisLabel = function xForY2AxisLabel() { + return this.xForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition()); +}; +Axis.prototype.dxForXAxisLabel = function dxForXAxisLabel() { + return this.dxForAxisLabel(!this.owner.config.axis_rotated, this.getXAxisLabelPosition()); +}; +Axis.prototype.dxForYAxisLabel = function dxForYAxisLabel() { + return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getYAxisLabelPosition()); +}; +Axis.prototype.dxForY2AxisLabel = function dxForY2AxisLabel() { + return this.dxForAxisLabel(this.owner.config.axis_rotated, this.getY2AxisLabelPosition()); +}; +Axis.prototype.dyForXAxisLabel = function dyForXAxisLabel() { + var $$ = this.owner, + config = $$.config, + position = this.getXAxisLabelPosition(); + if (config.axis_rotated) { + return position.isInner ? "1.2em" : -25 - this.getMaxTickWidth('x'); + } else { + return position.isInner ? "-0.5em" : config.axis_x_height ? config.axis_x_height - 10 : "3em"; + } +}; +Axis.prototype.dyForYAxisLabel = function dyForYAxisLabel() { + var $$ = this.owner, + position = this.getYAxisLabelPosition(); + if ($$.config.axis_rotated) { + return position.isInner ? "-0.5em" : "3em"; + } else { + return position.isInner ? "1.2em" : -10 - ($$.config.axis_y_inner ? 0 : this.getMaxTickWidth('y') + 10); + } +}; +Axis.prototype.dyForY2AxisLabel = function dyForY2AxisLabel() { + var $$ = this.owner, + position = this.getY2AxisLabelPosition(); + if ($$.config.axis_rotated) { + return position.isInner ? "1.2em" : "-2.2em"; + } else { + return position.isInner ? "-0.5em" : 15 + ($$.config.axis_y2_inner ? 0 : this.getMaxTickWidth('y2') + 15); + } +}; +Axis.prototype.textAnchorForXAxisLabel = function textAnchorForXAxisLabel() { + var $$ = this.owner; + return this.textAnchorForAxisLabel(!$$.config.axis_rotated, this.getXAxisLabelPosition()); +}; +Axis.prototype.textAnchorForYAxisLabel = function textAnchorForYAxisLabel() { + var $$ = this.owner; + return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getYAxisLabelPosition()); +}; +Axis.prototype.textAnchorForY2AxisLabel = function textAnchorForY2AxisLabel() { + var $$ = this.owner; + return this.textAnchorForAxisLabel($$.config.axis_rotated, this.getY2AxisLabelPosition()); +}; +Axis.prototype.getMaxTickWidth = function getMaxTickWidth(id, withoutRecompute) { + var $$ = this.owner, + config = $$.config, + maxWidth = 0, + targetsToShow, + scale, + axis, + dummy, + svg; + if (withoutRecompute && $$.currentMaxTickWidths[id]) { return $$.currentMaxTickWidths[id]; - }; - - Axis.prototype.updateLabels = function updateLabels(withTransition) { - var $$ = this.owner; - var axisXLabel = $$.main.select('.' + CLASS.axisX + ' .' + CLASS.axisXLabel), - axisYLabel = $$.main.select('.' + CLASS.axisY + ' .' + CLASS.axisYLabel), - axisY2Label = $$.main.select('.' + CLASS.axisY2 + ' .' + CLASS.axisY2Label); - (withTransition ? axisXLabel.transition() : axisXLabel) - .attr("x", this.xForXAxisLabel.bind(this)) - .attr("dx", this.dxForXAxisLabel.bind(this)) - .attr("dy", this.dyForXAxisLabel.bind(this)) - .text(this.textForXAxisLabel.bind(this)); - (withTransition ? axisYLabel.transition() : axisYLabel) - .attr("x", this.xForYAxisLabel.bind(this)) - .attr("dx", this.dxForYAxisLabel.bind(this)) - .attr("dy", this.dyForYAxisLabel.bind(this)) - .text(this.textForYAxisLabel.bind(this)); - (withTransition ? axisY2Label.transition() : axisY2Label) - .attr("x", this.xForY2AxisLabel.bind(this)) - .attr("dx", this.dxForY2AxisLabel.bind(this)) - .attr("dy", this.dyForY2AxisLabel.bind(this)) - .text(this.textForY2AxisLabel.bind(this)); - }; - Axis.prototype.getPadding = function getPadding(padding, key, defaultValue, domainLength) { - var p = typeof padding === 'number' ? padding : padding[key]; - if (!isValue(p)) { - return defaultValue; - } - if (padding.unit === 'ratio') { - return padding[key] * domainLength; + } + if ($$.svg) { + targetsToShow = $$.filterTargetsToShow($$.data.targets); + if (id === 'y') { + scale = $$.y.copy().domain($$.getYDomain(targetsToShow, 'y')); + axis = this.getYAxis(scale, $$.yOrient, config.axis_y_tick_format, $$.yAxisTickValues, false, true, true); + } else if (id === 'y2') { + scale = $$.y2.copy().domain($$.getYDomain(targetsToShow, 'y2')); + axis = this.getYAxis(scale, $$.y2Orient, config.axis_y2_tick_format, $$.y2AxisTickValues, false, true, true); + } else { + scale = $$.x.copy().domain($$.getXDomain(targetsToShow)); + axis = this.getXAxis(scale, $$.xOrient, $$.xAxisTickFormat, $$.xAxisTickValues, false, true, true); + this.updateXAxisTickValues(targetsToShow, axis); } - // assume padding is pixels if unit is not specified - return this.convertPixelsToAxisPadding(p, domainLength); - }; - Axis.prototype.convertPixelsToAxisPadding = function convertPixelsToAxisPadding(pixels, domainLength) { - var $$ = this.owner, - length = $$.config.axis_rotated ? $$.width : $$.height; - return domainLength * (pixels / length); - }; - Axis.prototype.generateTickValues = function generateTickValues(values, tickCount, forTimeSeries) { - var tickValues = values, targetCount, start, end, count, interval, i, tickValue; - if (tickCount) { - targetCount = isFunction(tickCount) ? tickCount() : tickCount; - // compute ticks according to tickCount - if (targetCount === 1) { - tickValues = [values[0]]; - } else if (targetCount === 2) { - tickValues = [values[0], values[values.length - 1]]; - } else if (targetCount > 2) { - count = targetCount - 2; - start = values[0]; - end = values[values.length - 1]; - interval = (end - start) / (count + 1); - // re-construct unique values - tickValues = [start]; - for (i = 0; i < count; i++) { - tickValue = +start + interval * (i + 1); - tickValues.push(forTimeSeries ? new Date(tickValue) : tickValue); + dummy = $$.d3.select('body').append('div').classed('c3', true); + svg = dummy.append("svg").style('visibility', 'hidden').style('position', 'fixed').style('top', 0).style('left', 0), svg.append('g').call(axis).each(function () { + $$.d3.select(this).selectAll('text').each(function () { + var box = this.getBoundingClientRect(); + if (maxWidth < box.width) { + maxWidth = box.width; } - tickValues.push(end); - } + }); + dummy.remove(); + }); + } + $$.currentMaxTickWidths[id] = maxWidth <= 0 ? $$.currentMaxTickWidths[id] : maxWidth; + return $$.currentMaxTickWidths[id]; +}; + +Axis.prototype.updateLabels = function updateLabels(withTransition) { + var $$ = this.owner; + var axisXLabel = $$.main.select('.' + CLASS.axisX + ' .' + CLASS.axisXLabel), + axisYLabel = $$.main.select('.' + CLASS.axisY + ' .' + CLASS.axisYLabel), + axisY2Label = $$.main.select('.' + CLASS.axisY2 + ' .' + CLASS.axisY2Label); + (withTransition ? axisXLabel.transition() : axisXLabel).attr("x", this.xForXAxisLabel.bind(this)).attr("dx", this.dxForXAxisLabel.bind(this)).attr("dy", this.dyForXAxisLabel.bind(this)).text(this.textForXAxisLabel.bind(this)); + (withTransition ? axisYLabel.transition() : axisYLabel).attr("x", this.xForYAxisLabel.bind(this)).attr("dx", this.dxForYAxisLabel.bind(this)).attr("dy", this.dyForYAxisLabel.bind(this)).text(this.textForYAxisLabel.bind(this)); + (withTransition ? axisY2Label.transition() : axisY2Label).attr("x", this.xForY2AxisLabel.bind(this)).attr("dx", this.dxForY2AxisLabel.bind(this)).attr("dy", this.dyForY2AxisLabel.bind(this)).text(this.textForY2AxisLabel.bind(this)); +}; +Axis.prototype.getPadding = function getPadding(padding, key, defaultValue, domainLength) { + var p = typeof padding === 'number' ? padding : padding[key]; + if (!isValue(p)) { + return defaultValue; + } + if (padding.unit === 'ratio') { + return padding[key] * domainLength; + } + // assume padding is pixels if unit is not specified + return this.convertPixelsToAxisPadding(p, domainLength); +}; +Axis.prototype.convertPixelsToAxisPadding = function convertPixelsToAxisPadding(pixels, domainLength) { + var $$ = this.owner, + length = $$.config.axis_rotated ? $$.width : $$.height; + return domainLength * (pixels / length); +}; +Axis.prototype.generateTickValues = function generateTickValues(values, tickCount, forTimeSeries) { + var tickValues = values, + targetCount, + start, + end, + count, + interval, + i, + tickValue; + if (tickCount) { + targetCount = isFunction(tickCount) ? tickCount() : tickCount; + // compute ticks according to tickCount + if (targetCount === 1) { + tickValues = [values[0]]; + } else if (targetCount === 2) { + tickValues = [values[0], values[values.length - 1]]; + } else if (targetCount > 2) { + count = targetCount - 2; + start = values[0]; + end = values[values.length - 1]; + interval = (end - start) / (count + 1); + // re-construct unique values + tickValues = [start]; + for (i = 0; i < count; i++) { + tickValue = +start + interval * (i + 1); + tickValues.push(forTimeSeries ? new Date(tickValue) : tickValue); + } + tickValues.push(end); } - if (!forTimeSeries) { tickValues = tickValues.sort(function (a, b) { return a - b; }); } - return tickValues; - }; - Axis.prototype.generateTransitions = function generateTransitions(duration) { - var $$ = this.owner, axes = $$.axes; - return { - axisX: duration ? axes.x.transition().duration(duration) : axes.x, - axisY: duration ? axes.y.transition().duration(duration) : axes.y, - axisY2: duration ? axes.y2.transition().duration(duration) : axes.y2, - axisSubX: duration ? axes.subx.transition().duration(duration) : axes.subx - }; - }; - Axis.prototype.redraw = function redraw(transitions, isHidden) { - var $$ = this.owner; - $$.axes.x.style("opacity", isHidden ? 0 : 1); - $$.axes.y.style("opacity", isHidden ? 0 : 1); - $$.axes.y2.style("opacity", isHidden ? 0 : 1); - $$.axes.subx.style("opacity", isHidden ? 0 : 1); - transitions.axisX.call($$.xAxis); - transitions.axisY.call($$.yAxis); - transitions.axisY2.call($$.y2Axis); - transitions.axisSubX.call($$.subXAxis); - }; - - function ChartInternal(api) { - var $$ = this; - $$.d3 = window.d3 ? window.d3 : typeof require !== 'undefined' ? require("d3") : undefined; - $$.api = api; - $$.config = $$.getDefaultConfig(); - $$.data = {}; - $$.cache = {}; - $$.axes = {}; } + if (!forTimeSeries) { + tickValues = tickValues.sort(function (a, b) { + return a - b; + }); + } + return tickValues; +}; +Axis.prototype.generateTransitions = function generateTransitions(duration) { + var $$ = this.owner, + axes = $$.axes; + return { + axisX: duration ? axes.x.transition().duration(duration) : axes.x, + axisY: duration ? axes.y.transition().duration(duration) : axes.y, + axisY2: duration ? axes.y2.transition().duration(duration) : axes.y2, + axisSubX: duration ? axes.subx.transition().duration(duration) : axes.subx + }; +}; +Axis.prototype.redraw = function redraw(transitions, isHidden) { + var $$ = this.owner; + $$.axes.x.style("opacity", isHidden ? 0 : 1); + $$.axes.y.style("opacity", isHidden ? 0 : 1); + $$.axes.y2.style("opacity", isHidden ? 0 : 1); + $$.axes.subx.style("opacity", isHidden ? 0 : 1); + transitions.axisX.call($$.xAxis); + transitions.axisY.call($$.yAxis); + transitions.axisY2.call($$.y2Axis); + transitions.axisSubX.call($$.subXAxis); +}; + +function ChartInternal(api){var $$=this;$$.d3=window.d3?window.d3:typeof require!=='undefined'?require("d3"):undefined;$$.api=api;$$.config=$$.getDefaultConfig();$$.data={};$$.cache={};$$.axes={};}var c3_chart_internal_fn=ChartInternal.prototype;c3_chart_internal_fn.beforeInit=function(){// can do something +};c3_chart_internal_fn.afterInit=function(){// can do something +};c3_chart_internal_fn.init=function(){var $$=this,config=$$.config;$$.initParams();if(config.data_url){$$.convertUrlToData(config.data_url,config.data_mimeType,config.data_headers,config.data_keys,$$.initWithData);}else if(config.data_json){$$.initWithData($$.convertJsonToData(config.data_json,config.data_keys));}else if(config.data_rows){$$.initWithData($$.convertRowsToData(config.data_rows));}else if(config.data_columns){$$.initWithData($$.convertColumnsToData(config.data_columns));}else{throw Error('url or json or rows or columns is required.');}};c3_chart_internal_fn.initParams=function(){var $$=this,d3$$1=$$.d3,config=$$.config;// MEMO: clipId needs to be unique because it conflicts when multiple charts exist +$$.clipId="c3-"+ +new Date()+'-clip',$$.clipIdForXAxis=$$.clipId+'-xaxis',$$.clipIdForYAxis=$$.clipId+'-yaxis',$$.clipIdForGrid=$$.clipId+'-grid',$$.clipIdForSubchart=$$.clipId+'-subchart',$$.clipPath=$$.getClipPath($$.clipId),$$.clipPathForXAxis=$$.getClipPath($$.clipIdForXAxis),$$.clipPathForYAxis=$$.getClipPath($$.clipIdForYAxis);$$.clipPathForGrid=$$.getClipPath($$.clipIdForGrid),$$.clipPathForSubchart=$$.getClipPath($$.clipIdForSubchart),$$.dragStart=null;$$.dragging=false;$$.flowing=false;$$.cancelClick=false;$$.mouseover=false;$$.transiting=false;$$.color=$$.generateColor();$$.levelColor=$$.generateLevelColor();$$.dataTimeFormat=config.data_xLocaltime?d3$$1.time.format:d3$$1.time.format.utc;$$.axisTimeFormat=config.axis_x_localtime?d3$$1.time.format:d3$$1.time.format.utc;$$.defaultAxisTimeFormat=$$.axisTimeFormat.multi([[".%L",function(d){return d.getMilliseconds();}],[":%S",function(d){return d.getSeconds();}],["%I:%M",function(d){return d.getMinutes();}],["%I %p",function(d){return d.getHours();}],["%-m/%-d",function(d){return d.getDay()&&d.getDate()!==1;}],["%-m/%-d",function(d){return d.getDate()!==1;}],["%-m/%-d",function(d){return d.getMonth();}],["%Y/%-m/%-d",function(){return true;}]]);$$.hiddenTargetIds=[];$$.hiddenLegendIds=[];$$.focusedTargetIds=[];$$.defocusedTargetIds=[];$$.xOrient=config.axis_rotated?"left":"bottom";$$.yOrient=config.axis_rotated?config.axis_y_inner?"top":"bottom":config.axis_y_inner?"right":"left";$$.y2Orient=config.axis_rotated?config.axis_y2_inner?"bottom":"top":config.axis_y2_inner?"left":"right";$$.subXOrient=config.axis_rotated?"left":"bottom";$$.isLegendRight=config.legend_position==='right';$$.isLegendInset=config.legend_position==='inset';$$.isLegendTop=config.legend_inset_anchor==='top-left'||config.legend_inset_anchor==='top-right';$$.isLegendLeft=config.legend_inset_anchor==='top-left'||config.legend_inset_anchor==='bottom-left';$$.legendStep=0;$$.legendItemWidth=0;$$.legendItemHeight=0;$$.currentMaxTickWidths={x:0,y:0,y2:0};$$.rotated_padding_left=30;$$.rotated_padding_right=config.axis_rotated&&!config.axis_x_show?0:30;$$.rotated_padding_top=5;$$.withoutFadeIn={};$$.intervalForObserveInserted=undefined;$$.axes.subx=d3$$1.selectAll([]);// needs when excluding subchart.js +};c3_chart_internal_fn.initChartElements=function(){if(this.initBar){this.initBar();}if(this.initLine){this.initLine();}if(this.initArc){this.initArc();}if(this.initGauge){this.initGauge();}if(this.initText){this.initText();}};c3_chart_internal_fn.initWithData=function(data){var $$=this,d3$$1=$$.d3,config=$$.config;var defs,main,binding=true;$$.axis=new Axis($$);if($$.initPie){$$.initPie();}if($$.initBrush){$$.initBrush();}if($$.initZoom){$$.initZoom();}if(!config.bindto){$$.selectChart=d3$$1.selectAll([]);}else if(typeof config.bindto.node==='function'){$$.selectChart=config.bindto;}else{$$.selectChart=d3$$1.select(config.bindto);}if($$.selectChart.empty()){$$.selectChart=d3$$1.select(document.createElement('div')).style('opacity',0);$$.observeInserted($$.selectChart);binding=false;}$$.selectChart.html("").classed("c3",true);// Init data as targets +$$.data.xs={};$$.data.targets=$$.convertDataToTargets(data);if(config.data_filter){$$.data.targets=$$.data.targets.filter(config.data_filter);}// Set targets to hide if needed +if(config.data_hide){$$.addHiddenTargetIds(config.data_hide===true?$$.mapToIds($$.data.targets):config.data_hide);}if(config.legend_hide){$$.addHiddenLegendIds(config.legend_hide===true?$$.mapToIds($$.data.targets):config.legend_hide);}// when gauge, hide legend // TODO: fix +if($$.hasType('gauge')){config.legend_show=false;}// Init sizes and scales +$$.updateSizes();$$.updateScales();// Set domains for each scale +$$.x.domain(d3$$1.extent($$.getXDomain($$.data.targets)));$$.y.domain($$.getYDomain($$.data.targets,'y'));$$.y2.domain($$.getYDomain($$.data.targets,'y2'));$$.subX.domain($$.x.domain());$$.subY.domain($$.y.domain());$$.subY2.domain($$.y2.domain());// Save original x domain for zoom update +$$.orgXDomain=$$.x.domain();// Set initialized scales to brush and zoom +if($$.brush){$$.brush.scale($$.subX);}if(config.zoom_enabled){$$.zoom.scale($$.x);}/*-- Basic Elements --*/// Define svgs +$$.svg=$$.selectChart.append("svg").style("overflow","hidden").on('mouseenter',function(){return config.onmouseover.call($$);}).on('mouseleave',function(){return config.onmouseout.call($$);});if($$.config.svg_classname){$$.svg.attr('class',$$.config.svg_classname);}// Define defs +defs=$$.svg.append("defs");$$.clipChart=$$.appendClip(defs,$$.clipId);$$.clipXAxis=$$.appendClip(defs,$$.clipIdForXAxis);$$.clipYAxis=$$.appendClip(defs,$$.clipIdForYAxis);$$.clipGrid=$$.appendClip(defs,$$.clipIdForGrid);$$.clipSubchart=$$.appendClip(defs,$$.clipIdForSubchart);$$.updateSvgSize();// Define regions +main=$$.main=$$.svg.append("g").attr("transform",$$.getTranslate('main'));if($$.initSubchart){$$.initSubchart();}if($$.initTooltip){$$.initTooltip();}if($$.initLegend){$$.initLegend();}if($$.initTitle){$$.initTitle();}/*-- Main Region --*/// text when empty +main.append("text").attr("class",CLASS.text+' '+CLASS.empty).attr("text-anchor","middle")// horizontal centering of text at x position in all browsers. +.attr("dominant-baseline","middle");// vertical centering of text at y position in all browsers, except IE. +// Regions +$$.initRegion();// Grids +$$.initGrid();// Define g for chart area +main.append('g').attr("clip-path",$$.clipPath).attr('class',CLASS.chart);// Grid lines +if(config.grid_lines_front){$$.initGridLines();}// Cover whole with rects for events +$$.initEventRect();// Define g for chart +$$.initChartElements();// if zoom privileged, insert rect to forefront +// TODO: is this needed? +main.insert('rect',config.zoom_privileged?null:'g.'+CLASS.regions).attr('class',CLASS.zoomRect).attr('width',$$.width).attr('height',$$.height).style('opacity',0).on("dblclick.zoom",null);// Set default extent if defined +if(config.axis_x_extent){$$.brush.extent($$.getDefaultExtent());}// Add Axis +$$.axis.init();// Set targets +$$.updateTargets($$.data.targets);// Draw with targets +if(binding){$$.updateDimension();$$.config.oninit.call($$);$$.redraw({withTransition:false,withTransform:true,withUpdateXDomain:true,withUpdateOrgXDomain:true,withTransitionForAxis:false});}// Bind resize event +$$.bindResize();// export element of the chart +$$.api.element=$$.selectChart.node();};c3_chart_internal_fn.smoothLines=function(el,type){var $$=this;if(type==='grid'){el.each(function(){var g=$$.d3.select(this),x1=g.attr('x1'),x2=g.attr('x2'),y1=g.attr('y1'),y2=g.attr('y2');g.attr({'x1':Math.ceil(x1),'x2':Math.ceil(x2),'y1':Math.ceil(y1),'y2':Math.ceil(y2)});});}};c3_chart_internal_fn.updateSizes=function(){var $$=this,config=$$.config;var legendHeight=$$.legend?$$.getLegendHeight():0,legendWidth=$$.legend?$$.getLegendWidth():0,legendHeightForBottom=$$.isLegendRight||$$.isLegendInset?0:legendHeight,hasArc=$$.hasArcType(),xAxisHeight=config.axis_rotated||hasArc?0:$$.getHorizontalAxisHeight('x'),subchartHeight=config.subchart_show&&!hasArc?config.subchart_size_height+xAxisHeight:0;$$.currentWidth=$$.getCurrentWidth();$$.currentHeight=$$.getCurrentHeight();// for main +$$.margin=config.axis_rotated?{top:$$.getHorizontalAxisHeight('y2')+$$.getCurrentPaddingTop(),right:hasArc?0:$$.getCurrentPaddingRight(),bottom:$$.getHorizontalAxisHeight('y')+legendHeightForBottom+$$.getCurrentPaddingBottom(),left:subchartHeight+(hasArc?0:$$.getCurrentPaddingLeft())}:{top:4+$$.getCurrentPaddingTop(),// for top tick text +right:hasArc?0:$$.getCurrentPaddingRight(),bottom:xAxisHeight+subchartHeight+legendHeightForBottom+$$.getCurrentPaddingBottom(),left:hasArc?0:$$.getCurrentPaddingLeft()};// for subchart +$$.margin2=config.axis_rotated?{top:$$.margin.top,right:NaN,bottom:20+legendHeightForBottom,left:$$.rotated_padding_left}:{top:$$.currentHeight-subchartHeight-legendHeightForBottom,right:NaN,bottom:xAxisHeight+legendHeightForBottom,left:$$.margin.left};// for legend +$$.margin3={top:0,right:NaN,bottom:0,left:0};if($$.updateSizeForLegend){$$.updateSizeForLegend(legendHeight,legendWidth);}$$.width=$$.currentWidth-$$.margin.left-$$.margin.right;$$.height=$$.currentHeight-$$.margin.top-$$.margin.bottom;if($$.width<0){$$.width=0;}if($$.height<0){$$.height=0;}$$.width2=config.axis_rotated?$$.margin.left-$$.rotated_padding_left-$$.rotated_padding_right:$$.width;$$.height2=config.axis_rotated?$$.height:$$.currentHeight-$$.margin2.top-$$.margin2.bottom;if($$.width2<0){$$.width2=0;}if($$.height2<0){$$.height2=0;}// for arc +$$.arcWidth=$$.width-($$.isLegendRight?legendWidth+10:0);$$.arcHeight=$$.height-($$.isLegendRight?0:10);if($$.hasType('gauge')&&!config.gauge_fullCircle){$$.arcHeight+=$$.height-$$.getGaugeLabelHeight();}if($$.updateRadius){$$.updateRadius();}if($$.isLegendRight&&hasArc){$$.margin3.left=$$.arcWidth/2+$$.radiusExpanded*1.1;}};c3_chart_internal_fn.updateTargets=function(targets){var $$=this;/*-- Main --*///-- Text --// +$$.updateTargetsForText(targets);//-- Bar --// +$$.updateTargetsForBar(targets);//-- Line --// +$$.updateTargetsForLine(targets);//-- Arc --// +if($$.hasArcType()&&$$.updateTargetsForArc){$$.updateTargetsForArc(targets);}/*-- Sub --*/if($$.updateTargetsForSubchart){$$.updateTargetsForSubchart(targets);}// Fade-in each chart +$$.showTargets();};c3_chart_internal_fn.showTargets=function(){var $$=this;$$.svg.selectAll('.'+CLASS.target).filter(function(d){return $$.isTargetToShow(d.id);}).transition().duration($$.config.transition_duration).style("opacity",1);};c3_chart_internal_fn.redraw=function(options,transitions){var $$=this,main=$$.main,d3$$1=$$.d3,config=$$.config;var areaIndices=$$.getShapeIndices($$.isAreaType),barIndices=$$.getShapeIndices($$.isBarType),lineIndices=$$.getShapeIndices($$.isLineType);var withY,withSubchart,withTransition,withTransitionForExit,withTransitionForAxis,withTransform,withUpdateXDomain,withUpdateOrgXDomain,withTrimXDomain,withLegend,withEventRect,withDimension,withUpdateXAxis;var hideAxis=$$.hasArcType();var drawArea,drawBar,drawLine,xForText,yForText;var duration,durationForExit,durationForAxis;var waitForDraw,flow;var targetsToShow=$$.filterTargetsToShow($$.data.targets),tickValues,i,intervalForCulling,xDomainForZoom;var xv=$$.xv.bind($$),cx,cy;options=options||{};withY=getOption(options,"withY",true);withSubchart=getOption(options,"withSubchart",true);withTransition=getOption(options,"withTransition",true);withTransform=getOption(options,"withTransform",false);withUpdateXDomain=getOption(options,"withUpdateXDomain",false);withUpdateOrgXDomain=getOption(options,"withUpdateOrgXDomain",false);withTrimXDomain=getOption(options,"withTrimXDomain",true);withUpdateXAxis=getOption(options,"withUpdateXAxis",withUpdateXDomain);withLegend=getOption(options,"withLegend",false);withEventRect=getOption(options,"withEventRect",true);withDimension=getOption(options,"withDimension",true);withTransitionForExit=getOption(options,"withTransitionForExit",withTransition);withTransitionForAxis=getOption(options,"withTransitionForAxis",withTransition);duration=withTransition?config.transition_duration:0;durationForExit=withTransitionForExit?duration:0;durationForAxis=withTransitionForAxis?duration:0;transitions=transitions||$$.axis.generateTransitions(durationForAxis);// update legend and transform each g +if(withLegend&&config.legend_show){$$.updateLegend($$.mapToIds($$.data.targets),options,transitions);}else if(withDimension){// need to update dimension (e.g. axis.y.tick.values) because y tick values should change +// no need to update axis in it because they will be updated in redraw() +$$.updateDimension(true);}// MEMO: needed for grids calculation +if($$.isCategorized()&&targetsToShow.length===0){$$.x.domain([0,$$.axes.x.selectAll('.tick').size()]);}if(targetsToShow.length){$$.updateXDomain(targetsToShow,withUpdateXDomain,withUpdateOrgXDomain,withTrimXDomain);if(!config.axis_x_tick_values){tickValues=$$.axis.updateXAxisTickValues(targetsToShow);}}else{$$.xAxis.tickValues([]);$$.subXAxis.tickValues([]);}if(config.zoom_rescale&&!options.flow){xDomainForZoom=$$.x.orgDomain();}$$.y.domain($$.getYDomain(targetsToShow,'y',xDomainForZoom));$$.y2.domain($$.getYDomain(targetsToShow,'y2',xDomainForZoom));if(!config.axis_y_tick_values&&config.axis_y_tick_count){$$.yAxis.tickValues($$.axis.generateTickValues($$.y.domain(),config.axis_y_tick_count));}if(!config.axis_y2_tick_values&&config.axis_y2_tick_count){$$.y2Axis.tickValues($$.axis.generateTickValues($$.y2.domain(),config.axis_y2_tick_count));}// axes +$$.axis.redraw(transitions,hideAxis);// Update axis label +$$.axis.updateLabels(withTransition);// show/hide if manual culling needed +if((withUpdateXDomain||withUpdateXAxis)&&targetsToShow.length){if(config.axis_x_tick_culling&&tickValues){for(i=1;i=0){d3$$1.select(this).style('display',index%intervalForCulling?'none':'block');}});}else{$$.svg.selectAll('.'+CLASS.axisX+' .tick text').style('display','block');}}// setup drawer - MEMO: these must be called after axis updated +drawArea=$$.generateDrawArea?$$.generateDrawArea(areaIndices,false):undefined;drawBar=$$.generateDrawBar?$$.generateDrawBar(barIndices):undefined;drawLine=$$.generateDrawLine?$$.generateDrawLine(lineIndices,false):undefined;xForText=$$.generateXYForText(areaIndices,barIndices,lineIndices,true);yForText=$$.generateXYForText(areaIndices,barIndices,lineIndices,false);// Update sub domain +if(withY){$$.subY.domain($$.getYDomain(targetsToShow,'y'));$$.subY2.domain($$.getYDomain(targetsToShow,'y2'));}// xgrid focus +$$.updateXgridFocus();// Data empty label positioning and text. +main.select("text."+CLASS.text+'.'+CLASS.empty).attr("x",$$.width/2).attr("y",$$.height/2).text(config.data_empty_label_text).transition().style('opacity',targetsToShow.length?0:1);// grid +$$.updateGrid(duration);// rect for regions +$$.updateRegion(duration);// bars +$$.updateBar(durationForExit);// lines, areas and cricles +$$.updateLine(durationForExit);$$.updateArea(durationForExit);$$.updateCircle();// text +if($$.hasDataLabel()){$$.updateText(durationForExit);}// title +if($$.redrawTitle){$$.redrawTitle();}// arc +if($$.redrawArc){$$.redrawArc(duration,durationForExit,withTransform);}// subchart +if($$.redrawSubchart){$$.redrawSubchart(withSubchart,transitions,duration,durationForExit,areaIndices,barIndices,lineIndices);}// circles for select +main.selectAll('.'+CLASS.selectedCircles).filter($$.isBarType.bind($$)).selectAll('circle').remove();// event rects will redrawn when flow called +if(config.interaction_enabled&&!options.flow&&withEventRect){$$.redrawEventRect();if($$.updateZoom){$$.updateZoom();}}// update circleY based on updated parameters +$$.updateCircleY();// generate circle x/y functions depending on updated params +cx=($$.config.axis_rotated?$$.circleY:$$.circleX).bind($$);cy=($$.config.axis_rotated?$$.circleX:$$.circleY).bind($$);if(options.flow){flow=$$.generateFlow({targets:targetsToShow,flow:options.flow,duration:options.flow.duration,drawBar:drawBar,drawLine:drawLine,drawArea:drawArea,cx:cx,cy:cy,xv:xv,xForText:xForText,yForText:yForText});}if((duration||flow)&&$$.isTabVisible()){// Only use transition if tab visible. See #938. +// transition should be derived from one transition +d3$$1.transition().duration(duration).each(function(){var transitionsToWait=[];// redraw and gather transitions +[$$.redrawBar(drawBar,true),$$.redrawLine(drawLine,true),$$.redrawArea(drawArea,true),$$.redrawCircle(cx,cy,true),$$.redrawText(xForText,yForText,options.flow,true),$$.redrawRegion(true),$$.redrawGrid(true)].forEach(function(transitions){transitions.forEach(function(transition){transitionsToWait.push(transition);});});// Wait for end of transitions to call flow and onrendered callback +waitForDraw=$$.generateWait();transitionsToWait.forEach(function(t){waitForDraw.add(t);});}).call(waitForDraw,function(){if(flow){flow();}if(config.onrendered){config.onrendered.call($$);}});}else{$$.redrawBar(drawBar);$$.redrawLine(drawLine);$$.redrawArea(drawArea);$$.redrawCircle(cx,cy);$$.redrawText(xForText,yForText,options.flow);$$.redrawRegion();$$.redrawGrid();if(config.onrendered){config.onrendered.call($$);}}// update fadein condition +$$.mapToIds($$.data.targets).forEach(function(id){$$.withoutFadeIn[id]=true;});};c3_chart_internal_fn.updateAndRedraw=function(options){var $$=this,config=$$.config,transitions;options=options||{};// same with redraw +options.withTransition=getOption(options,"withTransition",true);options.withTransform=getOption(options,"withTransform",false);options.withLegend=getOption(options,"withLegend",false);// NOT same with redraw +options.withUpdateXDomain=true;options.withUpdateOrgXDomain=true;options.withTransitionForExit=false;options.withTransitionForTransform=getOption(options,"withTransitionForTransform",options.withTransition);// MEMO: this needs to be called before updateLegend and it means this ALWAYS needs to be called) +$$.updateSizes();// MEMO: called in updateLegend in redraw if withLegend +if(!(options.withLegend&&config.legend_show)){transitions=$$.axis.generateTransitions(options.withTransitionForAxis?config.transition_duration:0);// Update scales +$$.updateScales();$$.updateSvgSize();// Update g positions +$$.transformAll(options.withTransitionForTransform,transitions);}// Draw with new sizes & scales +$$.redraw(options,transitions);};c3_chart_internal_fn.redrawWithoutRescale=function(){this.redraw({withY:false,withSubchart:false,withEventRect:false,withTransitionForAxis:false});};c3_chart_internal_fn.isTimeSeries=function(){return this.config.axis_x_type==='timeseries';};c3_chart_internal_fn.isCategorized=function(){return this.config.axis_x_type.indexOf('categor')>=0;};c3_chart_internal_fn.isCustomX=function(){var $$=this,config=$$.config;return!$$.isTimeSeries()&&(config.data_x||notEmpty(config.data_xs));};c3_chart_internal_fn.isTimeSeriesY=function(){return this.config.axis_y_type==='timeseries';};c3_chart_internal_fn.getTranslate=function(target){var $$=this,config=$$.config,x,y;if(target==='main'){x=asHalfPixel($$.margin.left);y=asHalfPixel($$.margin.top);}else if(target==='context'){x=asHalfPixel($$.margin2.left);y=asHalfPixel($$.margin2.top);}else if(target==='legend'){x=$$.margin3.left;y=$$.margin3.top;}else if(target==='x'){x=0;y=config.axis_rotated?0:$$.height;}else if(target==='y'){x=0;y=config.axis_rotated?$$.height:0;}else if(target==='y2'){x=config.axis_rotated?0:$$.width;y=config.axis_rotated?1:0;}else if(target==='subx'){x=0;y=config.axis_rotated?0:$$.height2;}else if(target==='arc'){x=$$.arcWidth/2;y=$$.arcHeight/2;}return"translate("+x+","+y+")";};c3_chart_internal_fn.initialOpacity=function(d){return d.value!==null&&this.withoutFadeIn[d.id]?1:0;};c3_chart_internal_fn.initialOpacityForCircle=function(d){return d.value!==null&&this.withoutFadeIn[d.id]?this.opacityForCircle(d):0;};c3_chart_internal_fn.opacityForCircle=function(d){var opacity=this.config.point_show?1:0;return isValue(d.value)?this.isScatterType(d)?0.5:opacity:0;};c3_chart_internal_fn.opacityForText=function(){return this.hasDataLabel()?1:0;};c3_chart_internal_fn.xx=function(d){return d?this.x(d.x):null;};c3_chart_internal_fn.xv=function(d){var $$=this,value=d.value;if($$.isTimeSeries()){value=$$.parseDate(d.value);}else if($$.isCategorized()&&typeof d.value==='string'){value=$$.config.axis_x_categories.indexOf(d.value);}return Math.ceil($$.x(value));};c3_chart_internal_fn.yv=function(d){var $$=this,yScale=d.axis&&d.axis==='y2'?$$.y2:$$.y;return Math.ceil(yScale(d.value));};c3_chart_internal_fn.subxx=function(d){return d?this.subX(d.x):null;};c3_chart_internal_fn.transformMain=function(withTransition,transitions){var $$=this,xAxis,yAxis,y2Axis;if(transitions&&transitions.axisX){xAxis=transitions.axisX;}else{xAxis=$$.main.select('.'+CLASS.axisX);if(withTransition){xAxis=xAxis.transition();}}if(transitions&&transitions.axisY){yAxis=transitions.axisY;}else{yAxis=$$.main.select('.'+CLASS.axisY);if(withTransition){yAxis=yAxis.transition();}}if(transitions&&transitions.axisY2){y2Axis=transitions.axisY2;}else{y2Axis=$$.main.select('.'+CLASS.axisY2);if(withTransition){y2Axis=y2Axis.transition();}}(withTransition?$$.main.transition():$$.main).attr("transform",$$.getTranslate('main'));xAxis.attr("transform",$$.getTranslate('x'));yAxis.attr("transform",$$.getTranslate('y'));y2Axis.attr("transform",$$.getTranslate('y2'));$$.main.select('.'+CLASS.chartArcs).attr("transform",$$.getTranslate('arc'));};c3_chart_internal_fn.transformAll=function(withTransition,transitions){var $$=this;$$.transformMain(withTransition,transitions);if($$.config.subchart_show){$$.transformContext(withTransition,transitions);}if($$.legend){$$.transformLegend(withTransition);}};c3_chart_internal_fn.updateSvgSize=function(){var $$=this,brush=$$.svg.select(".c3-brush .background");$$.svg.attr('width',$$.currentWidth).attr('height',$$.currentHeight);$$.svg.selectAll(['#'+$$.clipId,'#'+$$.clipIdForGrid]).select('rect').attr('width',$$.width).attr('height',$$.height);$$.svg.select('#'+$$.clipIdForXAxis).select('rect').attr('x',$$.getXAxisClipX.bind($$)).attr('y',$$.getXAxisClipY.bind($$)).attr('width',$$.getXAxisClipWidth.bind($$)).attr('height',$$.getXAxisClipHeight.bind($$));$$.svg.select('#'+$$.clipIdForYAxis).select('rect').attr('x',$$.getYAxisClipX.bind($$)).attr('y',$$.getYAxisClipY.bind($$)).attr('width',$$.getYAxisClipWidth.bind($$)).attr('height',$$.getYAxisClipHeight.bind($$));$$.svg.select('#'+$$.clipIdForSubchart).select('rect').attr('width',$$.width).attr('height',brush.size()?brush.attr('height'):0);$$.svg.select('.'+CLASS.zoomRect).attr('width',$$.width).attr('height',$$.height);// MEMO: parent div's height will be bigger than svg when +$$.selectChart.style('max-height',$$.currentHeight+"px");};c3_chart_internal_fn.updateDimension=function(withoutAxis){var $$=this;if(!withoutAxis){if($$.config.axis_rotated){$$.axes.x.call($$.xAxis);$$.axes.subx.call($$.subXAxis);}else{$$.axes.y.call($$.yAxis);$$.axes.y2.call($$.y2Axis);}}$$.updateSizes();$$.updateScales();$$.updateSvgSize();$$.transformAll(false);};c3_chart_internal_fn.observeInserted=function(selection){var $$=this,observer;if(typeof MutationObserver==='undefined'){window.console.error("MutationObserver not defined.");return;}observer=new MutationObserver(function(mutations){mutations.forEach(function(mutation){if(mutation.type==='childList'&&mutation.previousSibling){observer.disconnect();// need to wait for completion of load because size calculation requires the actual sizes determined after that completion +$$.intervalForObserveInserted=window.setInterval(function(){// parentNode will NOT be null when completed +if(selection.node().parentNode){window.clearInterval($$.intervalForObserveInserted);$$.updateDimension();if($$.brush){$$.brush.update();}$$.config.oninit.call($$);$$.redraw({withTransform:true,withUpdateXDomain:true,withUpdateOrgXDomain:true,withTransition:false,withTransitionForTransform:false,withLegend:true});selection.transition().style('opacity',1);}},10);}});});observer.observe(selection.node(),{attributes:true,childList:true,characterData:true});};c3_chart_internal_fn.bindResize=function(){var $$=this,config=$$.config;$$.resizeFunction=$$.generateResize();$$.resizeFunction.add(function(){config.onresize.call($$);});if(config.resize_auto){$$.resizeFunction.add(function(){if($$.resizeTimeout!==undefined){window.clearTimeout($$.resizeTimeout);}$$.resizeTimeout=window.setTimeout(function(){delete $$.resizeTimeout;$$.api.flush();},100);});}$$.resizeFunction.add(function(){config.onresized.call($$);});if(window.attachEvent){window.attachEvent('onresize',$$.resizeFunction);}else if(window.addEventListener){window.addEventListener('resize',$$.resizeFunction,false);}else{// fallback to this, if this is a very old browser +var wrapper=window.onresize;if(!wrapper){// create a wrapper that will call all charts +wrapper=$$.generateResize();}else if(!wrapper.add||!wrapper.remove){// there is already a handler registered, make sure we call it too +wrapper=$$.generateResize();wrapper.add(window.onresize);}// add this graph to the wrapper, we will be removed if the user calls destroy +wrapper.add($$.resizeFunction);window.onresize=wrapper;}};c3_chart_internal_fn.generateResize=function(){var resizeFunctions=[];function callResizeFunctions(){resizeFunctions.forEach(function(f){f();});}callResizeFunctions.add=function(f){resizeFunctions.push(f);};callResizeFunctions.remove=function(f){for(var i=0;i", key, ", target =>", target); +if(key&&target&&(typeof target==='undefined'?'undefined':_typeof(target))==='object'&&key in target){target=target[key];return find();}else if(!key){return target;}else{return undefined;}}Object.keys(this_config).forEach(function(key){target=config;keys=key.split('_');read=find();// console.log("CONFIG : ", key, read); +if(isDefined(read)){this_config[key]=read;}});};c3_chart_internal_fn.getScale=function(min,max,forTimeseries){return(forTimeseries?this.d3.time.scale():this.d3.scale.linear()).range([min,max]);};c3_chart_internal_fn.getX=function(min,max,domain,offset){var $$=this,scale=$$.getScale(min,max,$$.isTimeSeries()),_scale=domain?scale.domain(domain):scale,key;// Define customized scale if categorized axis +if($$.isCategorized()){offset=offset||function(){return 0;};scale=function scale(d,raw){var v=_scale(d)+offset(d);return raw?v:Math.ceil(v);};}else{scale=function scale(d,raw){var v=_scale(d);return raw?v:Math.ceil(v);};}// define functions +for(key in _scale){scale[key]=_scale[key];}scale.orgDomain=function(){return _scale.domain();};// define custom domain() for categorized axis +if($$.isCategorized()){scale.domain=function(domain){if(!arguments.length){domain=this.orgDomain();return[domain[0],domain[1]+1];}_scale.domain(domain);return scale;};}return scale;};c3_chart_internal_fn.getY=function(min,max,domain){var scale=this.getScale(min,max,this.isTimeSeriesY());if(domain){scale.domain(domain);}return scale;};c3_chart_internal_fn.getYScale=function(id){return this.axis.getId(id)==='y2'?this.y2:this.y;};c3_chart_internal_fn.getSubYScale=function(id){return this.axis.getId(id)==='y2'?this.subY2:this.subY;};c3_chart_internal_fn.updateScales=function(){var $$=this,config=$$.config,forInit=!$$.x;// update edges +$$.xMin=config.axis_rotated?1:0;$$.xMax=config.axis_rotated?$$.height:$$.width;$$.yMin=config.axis_rotated?0:$$.height;$$.yMax=config.axis_rotated?$$.width:1;$$.subXMin=$$.xMin;$$.subXMax=$$.xMax;$$.subYMin=config.axis_rotated?0:$$.height2;$$.subYMax=config.axis_rotated?$$.width2:1;// update scales +$$.x=$$.getX($$.xMin,$$.xMax,forInit?undefined:$$.x.orgDomain(),function(){return $$.xAxis.tickOffset();});$$.y=$$.getY($$.yMin,$$.yMax,forInit?config.axis_y_default:$$.y.domain());$$.y2=$$.getY($$.yMin,$$.yMax,forInit?config.axis_y2_default:$$.y2.domain());$$.subX=$$.getX($$.xMin,$$.xMax,$$.orgXDomain,function(d){return d%1?0:$$.subXAxis.tickOffset();});$$.subY=$$.getY($$.subYMin,$$.subYMax,forInit?config.axis_y_default:$$.subY.domain());$$.subY2=$$.getY($$.subYMin,$$.subYMax,forInit?config.axis_y2_default:$$.subY2.domain());// update axes +$$.xAxisTickFormat=$$.axis.getXAxisTickFormat();$$.xAxisTickValues=$$.axis.getXAxisTickValues();$$.yAxisTickValues=$$.axis.getYAxisTickValues();$$.y2AxisTickValues=$$.axis.getY2AxisTickValues();$$.xAxis=$$.axis.getXAxis($$.x,$$.xOrient,$$.xAxisTickFormat,$$.xAxisTickValues,config.axis_x_tick_outer);$$.subXAxis=$$.axis.getXAxis($$.subX,$$.subXOrient,$$.xAxisTickFormat,$$.xAxisTickValues,config.axis_x_tick_outer);$$.yAxis=$$.axis.getYAxis($$.y,$$.yOrient,config.axis_y_tick_format,$$.yAxisTickValues,config.axis_y_tick_outer);$$.y2Axis=$$.axis.getYAxis($$.y2,$$.y2Orient,config.axis_y2_tick_format,$$.y2AxisTickValues,config.axis_y2_tick_outer);// Set initialized scales to brush and zoom +if(!forInit){if($$.brush){$$.brush.scale($$.subX);}if(config.zoom_enabled){$$.zoom.scale($$.x);}}// update for arc +if($$.updateArc){$$.updateArc();}};c3_chart_internal_fn.getYDomainMin=function(targets){var $$=this,config=$$.config,ids=$$.mapToIds(targets),ys=$$.getValuesAsIdKeyed(targets),j,k,baseId,idsInGroup,id,hasNegativeValue;if(config.data_groups.length>0){hasNegativeValue=$$.hasNegativeValueInTargets(targets);for(j=0;j=0;});if(idsInGroup.length===0){continue;}baseId=idsInGroup[0];// Consider negative values +if(hasNegativeValue&&ys[baseId]){ys[baseId].forEach(function(v,i){ys[baseId][i]=v<0?v:0;});}// Compute min +for(k=1;k0)){ys[baseId][i]+=+v;}});}}}return $$.d3.min(Object.keys(ys).map(function(key){return $$.d3.min(ys[key]);}));};c3_chart_internal_fn.getYDomainMax=function(targets){var $$=this,config=$$.config,ids=$$.mapToIds(targets),ys=$$.getValuesAsIdKeyed(targets),j,k,baseId,idsInGroup,id,hasPositiveValue;if(config.data_groups.length>0){hasPositiveValue=$$.hasPositiveValueInTargets(targets);for(j=0;j=0;});if(idsInGroup.length===0){continue;}baseId=idsInGroup[0];// Consider positive values +if(hasPositiveValue&&ys[baseId]){ys[baseId].forEach(function(v,i){ys[baseId][i]=v>0?v:0;});}// Compute max +for(k=1;k=0&&yDomainMax>=0;isAllNegative=yDomainMin<=0&&yDomainMax<=0;// Cancel zerobased if axis_*_min / axis_*_max specified +if(isValue(yMin)&&isAllPositive||isValue(yMax)&&isAllNegative){isZeroBased=false;}// Bar/Area chart should be 0-based if all positive|negative +if(isZeroBased){if(isAllPositive){yDomainMin=0;}if(isAllNegative){yDomainMax=0;}}domainLength=Math.abs(yDomainMax-yDomainMin);padding=padding_top=padding_bottom=domainLength*0.1;if(typeof center!=='undefined'){yDomainAbs=Math.max(Math.abs(yDomainMin),Math.abs(yDomainMax));yDomainMax=center+yDomainAbs;yDomainMin=center-yDomainAbs;}// add padding for data label +if(showHorizontalDataLabel){lengths=$$.getDataLabelLength(yDomainMin,yDomainMax,'width');diff=diffDomain($$.y.range());ratio=[lengths[0]/diff,lengths[1]/diff];padding_top+=domainLength*(ratio[1]/(1-ratio[0]-ratio[1]));padding_bottom+=domainLength*(ratio[0]/(1-ratio[0]-ratio[1]));}else if(showVerticalDataLabel){lengths=$$.getDataLabelLength(yDomainMin,yDomainMax,'height');padding_top+=$$.axis.convertPixelsToAxisPadding(lengths[1],domainLength);padding_bottom+=$$.axis.convertPixelsToAxisPadding(lengths[0],domainLength);}if(axisId==='y'&¬Empty(config.axis_y_padding)){padding_top=$$.axis.getPadding(config.axis_y_padding,'top',padding_top,domainLength);padding_bottom=$$.axis.getPadding(config.axis_y_padding,'bottom',padding_bottom,domainLength);}if(axisId==='y2'&¬Empty(config.axis_y2_padding)){padding_top=$$.axis.getPadding(config.axis_y2_padding,'top',padding_top,domainLength);padding_bottom=$$.axis.getPadding(config.axis_y2_padding,'bottom',padding_bottom,domainLength);}// Bar/Area chart should be 0-based if all positive|negative +if(isZeroBased){if(isAllPositive){padding_bottom=yDomainMin;}if(isAllNegative){padding_top=-yDomainMax;}}domain=[yDomainMin-padding_bottom,yDomainMax+padding_top];return isInverted?domain.reverse():domain;};c3_chart_internal_fn.getXDomainMin=function(targets){var $$=this,config=$$.config;return isDefined(config.axis_x_min)?$$.isTimeSeries()?this.parseDate(config.axis_x_min):config.axis_x_min:$$.d3.min(targets,function(t){return $$.d3.min(t.values,function(v){return v.x;});});};c3_chart_internal_fn.getXDomainMax=function(targets){var $$=this,config=$$.config;return isDefined(config.axis_x_max)?$$.isTimeSeries()?this.parseDate(config.axis_x_max):config.axis_x_max:$$.d3.max(targets,function(t){return $$.d3.max(t.values,function(v){return v.x;});});};c3_chart_internal_fn.getXDomainPadding=function(domain){var $$=this,config=$$.config,diff=domain[1]-domain[0],maxDataCount,padding,paddingLeft,paddingRight;if($$.isCategorized()){padding=0;}else if($$.hasType('bar')){maxDataCount=$$.getMaxDataCount();padding=maxDataCount>1?diff/(maxDataCount-1)/2:0.5;}else{padding=diff*0.01;}if(_typeof(config.axis_x_padding)==='object'&¬Empty(config.axis_x_padding)){paddingLeft=isValue(config.axis_x_padding.left)?config.axis_x_padding.left:padding;paddingRight=isValue(config.axis_x_padding.right)?config.axis_x_padding.right:padding;}else if(typeof config.axis_x_padding==='number'){paddingLeft=paddingRight=config.axis_x_padding;}else{paddingLeft=paddingRight=padding;}return{left:paddingLeft,right:paddingRight};};c3_chart_internal_fn.getXDomain=function(targets){var $$=this,xDomain=[$$.getXDomainMin(targets),$$.getXDomainMax(targets)],firstX=xDomain[0],lastX=xDomain[1],padding=$$.getXDomainPadding(xDomain),min=0,max=0;// show center of x domain if min and max are the same +if(firstX-lastX===0&&!$$.isCategorized()){if($$.isTimeSeries()){firstX=new Date(firstX.getTime()*0.5);lastX=new Date(lastX.getTime()*1.5);}else{firstX=firstX===0?1:firstX*0.5;lastX=lastX===0?-1:lastX*1.5;}}if(firstX||firstX===0){min=$$.isTimeSeries()?new Date(firstX.getTime()-padding.left):firstX-padding.left;}if(lastX||lastX===0){max=$$.isTimeSeries()?new Date(lastX.getTime()+padding.right):lastX+padding.right;}return[min,max];};c3_chart_internal_fn.updateXDomain=function(targets,withUpdateXDomain,withUpdateOrgXDomain,withTrim,domain){var $$=this,config=$$.config;if(withUpdateOrgXDomain){$$.x.domain(domain?domain:$$.d3.extent($$.getXDomain(targets)));$$.orgXDomain=$$.x.domain();if(config.zoom_enabled){$$.zoom.scale($$.x).updateScaleExtent();}$$.subX.domain($$.x.domain());if($$.brush){$$.brush.scale($$.subX);}}if(withUpdateXDomain){$$.x.domain(domain?domain:!$$.brush||$$.brush.empty()?$$.orgXDomain:$$.brush.extent());if(config.zoom_enabled){$$.zoom.scale($$.x).updateScaleExtent();}}// Trim domain when too big by zoom mousemove event +if(withTrim){$$.x.domain($$.trimXDomain($$.x.orgDomain()));}return $$.x.domain();};c3_chart_internal_fn.trimXDomain=function(domain){var zoomDomain=this.getZoomDomain(),min=zoomDomain[0],max=zoomDomain[1];if(domain[0]<=min){domain[1]=+domain[1]+(min-domain[0]);domain[0]=min;}if(max<=domain[1]){domain[0]=+domain[0]-(domain[1]-max);domain[1]=max;}return domain;};c3_chart_internal_fn.isX=function(key){var $$=this,config=$$.config;return config.data_x&&key===config.data_x||notEmpty(config.data_xs)&&hasValue(config.data_xs,key);};c3_chart_internal_fn.isNotX=function(key){return!this.isX(key);};c3_chart_internal_fn.getXKey=function(id){var $$=this,config=$$.config;return config.data_x?config.data_x:notEmpty(config.data_xs)?config.data_xs[id]:null;};c3_chart_internal_fn.getXValuesOfXKey=function(key,targets){var $$=this,xValues,ids=targets&¬Empty(targets)?$$.mapToIds(targets):[];ids.forEach(function(id){if($$.getXKey(id)===key){xValues=$$.data.xs[id];}});return xValues;};c3_chart_internal_fn.getIndexByX=function(x){var $$=this,data=$$.filterByX($$.data.targets,x);return data.length?data[0].index:null;};c3_chart_internal_fn.getXValue=function(id,i){var $$=this;return id in $$.data.xs&&$$.data.xs[id]&&isValue($$.data.xs[id][i])?$$.data.xs[id][i]:i;};c3_chart_internal_fn.getOtherTargetXs=function(){var $$=this,idsForX=Object.keys($$.data.xs);return idsForX.length?$$.data.xs[idsForX[0]]:null;};c3_chart_internal_fn.getOtherTargetX=function(index){var xs=this.getOtherTargetXs();return xs&&index1;};c3_chart_internal_fn.isMultipleX=function(){return notEmpty(this.config.data_xs)||!this.config.data_xSort||this.hasType('scatter');};c3_chart_internal_fn.addName=function(data){var $$=this,name;if(data){name=$$.config.data_names[data.id];data.name=name!==undefined?name:data.id;}return data;};c3_chart_internal_fn.getValueOnIndex=function(values,index){var valueOnIndex=values.filter(function(v){return v.index===index;});return valueOnIndex.length?valueOnIndex[0]:null;};c3_chart_internal_fn.updateTargetX=function(targets,x){var $$=this;targets.forEach(function(t){t.values.forEach(function(v,i){v.x=$$.generateTargetX(x[i],t.id,i);});$$.data.xs[t.id]=x;});};c3_chart_internal_fn.updateTargetXs=function(targets,xs){var $$=this;targets.forEach(function(t){if(xs[t.id]){$$.updateTargetX([t],xs[t.id]);}});};c3_chart_internal_fn.generateTargetX=function(rawX,id,index){var $$=this,x;if($$.isTimeSeries()){x=rawX?$$.parseDate(rawX):$$.parseDate($$.getXValue(id,index));}else if($$.isCustomX()&&!$$.isCategorized()){x=isValue(rawX)?+rawX:$$.getXValue(id,index);}else{x=index;}return x;};c3_chart_internal_fn.cloneTarget=function(target){return{id:target.id,id_org:target.id_org,values:target.values.map(function(d){return{x:d.x,value:d.value,id:d.id};})};};c3_chart_internal_fn.updateXs=function(){var $$=this;if($$.data.targets.length){$$.xs=[];$$.data.targets[0].values.forEach(function(v){$$.xs[v.index]=v.x;});}};c3_chart_internal_fn.getPrevX=function(i){var x=this.xs[i-1];return typeof x!=='undefined'?x:null;};c3_chart_internal_fn.getNextX=function(i){var x=this.xs[i+1];return typeof x!=='undefined'?x:null;};c3_chart_internal_fn.getMaxDataCount=function(){var $$=this;return $$.d3.max($$.data.targets,function(t){return t.values.length;});};c3_chart_internal_fn.getMaxDataCountTarget=function(targets){var length=targets.length,max=0,maxTarget;if(length>1){targets.forEach(function(t){if(t.values.length>max){maxTarget=t;max=t.values.length;}});}else{maxTarget=length?targets[0]:null;}return maxTarget;};c3_chart_internal_fn.getEdgeX=function(targets){var $$=this;return!targets.length?[0,0]:[$$.d3.min(targets,function(t){return t.values[0].x;}),$$.d3.max(targets,function(t){return t.values[t.values.length-1].x;})];};c3_chart_internal_fn.mapToIds=function(targets){return targets.map(function(d){return d.id;});};c3_chart_internal_fn.mapToTargetIds=function(ids){var $$=this;return ids?[].concat(ids):$$.mapToIds($$.data.targets);};c3_chart_internal_fn.hasTarget=function(targets,id){var ids=this.mapToIds(targets),i;for(i=0;ib?1:a>=b?0:NaN;});};c3_chart_internal_fn.addHiddenTargetIds=function(targetIds){this.hiddenTargetIds=this.hiddenTargetIds.concat(targetIds);};c3_chart_internal_fn.removeHiddenTargetIds=function(targetIds){this.hiddenTargetIds=this.hiddenTargetIds.filter(function(id){return targetIds.indexOf(id)<0;});};c3_chart_internal_fn.addHiddenLegendIds=function(targetIds){this.hiddenLegendIds=this.hiddenLegendIds.concat(targetIds);};c3_chart_internal_fn.removeHiddenLegendIds=function(targetIds){this.hiddenLegendIds=this.hiddenLegendIds.filter(function(id){return targetIds.indexOf(id)<0;});};c3_chart_internal_fn.getValuesAsIdKeyed=function(targets){var ys={};targets.forEach(function(t){ys[t.id]=[];t.values.forEach(function(v){ys[t.id].push(v.value);});});return ys;};c3_chart_internal_fn.checkValueInTargets=function(targets,checker){var ids=Object.keys(targets),i,j,values;for(i=0;i0;});};c3_chart_internal_fn.isOrderDesc=function(){var config=this.config;return typeof config.data_order==='string'&&config.data_order.toLowerCase()==='desc';};c3_chart_internal_fn.isOrderAsc=function(){var config=this.config;return typeof config.data_order==='string'&&config.data_order.toLowerCase()==='asc';};c3_chart_internal_fn.orderTargets=function(targets){var $$=this,config=$$.config,orderAsc=$$.isOrderAsc(),orderDesc=$$.isOrderDesc();if(orderAsc||orderDesc){targets.sort(function(t1,t2){var reducer=function reducer(p,c){return p+Math.abs(c.value);};var t1Sum=t1.values.reduce(reducer,0),t2Sum=t2.values.reduce(reducer,0);return orderAsc?t2Sum-t1Sum:t1Sum-t2Sum;});}else if(isFunction(config.data_order)){targets.sort(config.data_order);}// TODO: accept name array for order +return targets;};c3_chart_internal_fn.filterByX=function(targets,x){return this.d3.merge(targets.map(function(t){return t.values;})).filter(function(v){return v.x-x===0;});};c3_chart_internal_fn.filterRemoveNull=function(data){return data.filter(function(d){return isValue(d.value);});};c3_chart_internal_fn.filterByXDomain=function(targets,xDomain){return targets.map(function(t){return{id:t.id,id_org:t.id_org,values:t.values.filter(function(v){return xDomain[0]<=v.x&&v.x<=xDomain[1];})};});};c3_chart_internal_fn.hasDataLabel=function(){var config=this.config;if(typeof config.data_labels==='boolean'&&config.data_labels){return true;}else if(_typeof(config.data_labels)==='object'&¬Empty(config.data_labels)){return true;}return false;};c3_chart_internal_fn.getDataLabelLength=function(min,max,key){var $$=this,lengths=[0,0],paddingCoef=1.3;$$.selectChart.select('svg').selectAll('.dummy').data([min,max]).enter().append('text').text(function(d){return $$.dataLabelFormat(d.id)(d);}).each(function(d,i){lengths[i]=this.getBoundingClientRect()[key]*paddingCoef;}).remove();return lengths;};c3_chart_internal_fn.isNoneArc=function(d){return this.hasTarget(this.data.targets,d.id);},c3_chart_internal_fn.isArc=function(d){return'data'in d&&this.hasTarget(this.data.targets,d.data.id);};c3_chart_internal_fn.findSameXOfValues=function(values,index){var i,targetX=values[index].x,sames=[];for(i=index-1;i>=0;i--){if(targetX!==values[i].x){break;}sames.push(values[i]);}for(i=index;i=0){$$.data.xs[id]=(appendXs&&$$.data.xs[id]?$$.data.xs[id]:[]).concat(data.map(function(d){return d[xKey];}).filter(isValue).map(function(rawX,i){return $$.generateTargetX(rawX,id,i);}));}// if not included in input data, find from preloaded data of other id's x +else if(config.data_x){$$.data.xs[id]=$$.getOtherTargetXs();}// if not included in input data, find from preloaded data +else if(notEmpty(config.data_xs)){$$.data.xs[id]=$$.getXValuesOfXKey(xKey,$$.data.targets);}// MEMO: if no x included, use same x of current will be used +}else{$$.data.xs[id]=data.map(function(d,i){return i;});}});// check x is defined +ids.forEach(function(id){if(!$$.data.xs[id]){throw new Error('x is not defined for id = "'+id+'".');}});// convert to target +targets=ids.map(function(id,index){var convertedId=config.data_idConverter(id);return{id:convertedId,id_org:id,values:data.map(function(d,i){var xKey=$$.getXKey(id),rawX=d[xKey],value=d[id]!==null&&!isNaN(d[id])?+d[id]:null,x;// use x as categories if custom x and categorized +if($$.isCustomX()&&$$.isCategorized()&&index===0&&!isUndefined(rawX)){if(index===0&&i===0){config.axis_x_categories=[];}x=config.axis_x_categories.indexOf(rawX);if(x===-1){x=config.axis_x_categories.length;config.axis_x_categories.push(rawX);}}else{x=$$.generateTargetX(rawX,id,i);}// mark as x = undefined if value is undefined and filter to remove after mapped +if(isUndefined(d[id])||$$.data.xs[id].length<=i){x=undefined;}return{x:x,value:value,id:convertedId};}).filter(function(v){return isDefined(v.x);})};});// finish targets +targets.forEach(function(t){var i;// sort values by its x +if(config.data_xSort){t.values=t.values.sort(function(v1,v2){var x1=v1.x||v1.x===0?v1.x:Infinity,x2=v2.x||v2.x===0?v2.x:Infinity;return x1-x2;});}// indexing each value +i=0;t.values.forEach(function(v){v.index=i++;});// this needs to be sorted because its index and value.index is identical +$$.data.xs[t.id].sort(function(v1,v2){return v1-v2;});});// cache information about values +$$.hasNegativeValue=$$.hasNegativeValueInTargets(targets);$$.hasPositiveValue=$$.hasPositiveValueInTargets(targets);// set target types +if(config.data_type){$$.setTargetType($$.mapToIds(targets).filter(function(id){return!(id in config.data_types);}),config.data_type);}// cache as original id keyed +targets.forEach(function(d){$$.addCache(d.id_org,d);});return targets;};c3_chart_internal_fn.load=function(targets,args){var $$=this;if(targets){// filter loading targets if needed +if(args.filter){targets=targets.filter(args.filter);}// set type if args.types || args.type specified +if(args.type||args.types){targets.forEach(function(t){var type=args.types&&args.types[t.id]?args.types[t.id]:args.type;$$.setTargetType(t.id,type);});}// Update/Add data +$$.data.targets.forEach(function(d){for(var i=0;iconfig.touch_tap_radius||Math.abs(y-tapY)>config.touch_tap_radius){return;}click(this);//indictate tap event fired to prevent click; +tap=true;setTimeout(function(){tap=false;},config.touch_tap_delay);}).call(config.data_selection_draggable&&$$.drag?d3$$1.behavior.drag().origin(Object).on('drag',function(){$$.drag(d3$$1.mouse(this));}).on('dragstart',function(){$$.dragstart(d3$$1.mouse(this));}).on('dragend',function(){$$.dragend();}):function(){});};c3_chart_internal_fn.dispatchEvent=function(type,index,mouse){var $$=this,selector='.'+CLASS.eventRect+(!$$.isMultipleX()?'-'+index:''),eventRect=$$.main.select(selector).node(),box=eventRect.getBoundingClientRect(),x=box.left+(mouse?mouse[0]:0),y=box.top+(mouse?mouse[1]:0),event=document.createEvent("MouseEvents");event.initMouseEvent(type,true,true,window,0,x,y,x,y,false,false,false,false,0,null);eventRect.dispatchEvent(event);};c3_chart_internal_fn.getCurrentWidth=function(){var $$=this,config=$$.config;return config.size_width?config.size_width:$$.getParentWidth();};c3_chart_internal_fn.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);};c3_chart_internal_fn.getCurrentPaddingTop=function(){var $$=this,config=$$.config,padding=isValue(config.padding_top)?config.padding_top:0;if($$.title&&$$.title.node()){padding+=$$.getTitlePadding();}return padding;};c3_chart_internal_fn.getCurrentPaddingBottom=function(){var config=this.config;return isValue(config.padding_bottom)?config.padding_bottom:0;};c3_chart_internal_fn.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?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));}};c3_chart_internal_fn.getCurrentPaddingRight=function(){var $$=this,config=$$.config,defaultPadding=10,legendWidthOnRight=$$.isLegendRight?$$.getLegendWidth()+20:0;if(isValue(config.padding_right)){return config.padding_right+1;// 1 is needed not to hide tick line +}else if(config.axis_rotated){return defaultPadding+legendWidthOnRight;}else if(!config.axis_y2_show||config.axis_y2_inner){// && !config.axis_rotated +return 2+legendWidthOnRight+($$.axis.getY2AxisLabelPosition().isOuter?20:0);}else{return ceil10($$.getAxisWidthByAxisId('y2'))+legendWidthOnRight;}};c3_chart_internal_fn.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;};c3_chart_internal_fn.getParentWidth=function(){return this.getParentRectValue('width');};c3_chart_internal_fn.getParentHeight=function(){var h=this.selectChart.style('height');return h.indexOf('px')>0?+h.replace('px',''):0;};c3_chart_internal_fn.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;};c3_chart_internal_fn.getAxisWidthByAxisId=function(id,withoutRecompute){var $$=this,position=$$.axis.getLabelPositionById(id);return $$.axis.getMaxTickWidth(id,withoutRecompute)+(position.isInner?20:40);};c3_chart_internal_fn.getHorizontalAxisHeight=function(axisId){var $$=this,config=$$.config,h=30;if(axisId==='x'&&!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-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-config.axis_y_tick_rotate)/180);}return h+($$.axis.getLabelPositionById(axisId).isInner?0:10)+(axisId==='y2'?-10:0);};c3_chart_internal_fn.getEventRectWidth=function(){return Math.max(0,this.xAxis.tickInterval());};c3_chart_internal_fn.getShapeIndices=function(typeFilter){var $$=this,config=$$.config,indices={},i=0,j,k;$$.filterTargetsToShow($$.data.targets.filter(typeFilter,$$)).forEach(function(d){for(j=0;j=0){offset+=scale(values[i].value)-y0;}}});return offset;};};c3_chart_internal_fn.isWithinShape=function(that,d){var $$=this,shape=$$.d3.select(that),isWithin;if(!$$.isTargetToShow(d.id)){isWithin=false;}else if(that.nodeName==='circle'){isWithin=$$.isStepType(d)?$$.isWithinStep(that,$$.getYScale(d.id)(d.value)):$$.isWithinCircle(that,$$.pointSelectR(d)*1.5);}else if(that.nodeName==='path'){isWithin=shape.classed(CLASS.bar)?$$.isWithinBar(that):true;}return isWithin;};c3_chart_internal_fn.getInterpolate=function(d){var $$=this,interpolation=$$.isInterpolationType($$.config.spline_interpolation_type)?$$.config.spline_interpolation_type:'cardinal';return $$.isSplineType(d)?interpolation:$$.isStepType(d)?$$.config.line_step_type:"linear";};c3_chart_internal_fn.initLine=function(){var $$=this;$$.main.select('.'+CLASS.chart).append("g").attr("class",CLASS.chartLines);};c3_chart_internal_fn.updateTargetsForLine=function(targets){var $$=this,config=$$.config,mainLineUpdate,mainLineEnter,classChartLine=$$.classChartLine.bind($$),classLines=$$.classLines.bind($$),classAreas=$$.classAreas.bind($$),classCircles=$$.classCircles.bind($$),classFocus=$$.classFocus.bind($$);mainLineUpdate=$$.main.select('.'+CLASS.chartLines).selectAll('.'+CLASS.chartLine).data(targets).attr('class',function(d){return classChartLine(d)+classFocus(d);});mainLineEnter=mainLineUpdate.enter().append('g').attr('class',classChartLine).style('opacity',0).style("pointer-events","none");// Lines for each data +mainLineEnter.append('g').attr("class",classLines);// Areas +mainLineEnter.append('g').attr('class',classAreas);// Circles for each data point on lines +mainLineEnter.append('g').attr("class",function(d){return $$.generateClass(CLASS.selectedCircles,d.id);});mainLineEnter.append('g').attr("class",classCircles).style("cursor",function(d){return config.data_selection_isselectable(d)?"pointer":null;});// Update date for selected circles +targets.forEach(function(t){$$.main.selectAll('.'+CLASS.selectedCircles+$$.getTargetSelectorSuffix(t.id)).selectAll('.'+CLASS.selectedCircle).each(function(d){d.value=t.values[d.index].value;});});// MEMO: can not keep same color... +//mainLineUpdate.exit().remove(); +};c3_chart_internal_fn.updateLine=function(durationForExit){var $$=this;$$.mainLine=$$.main.selectAll('.'+CLASS.lines).selectAll('.'+CLASS.line).data($$.lineData.bind($$));$$.mainLine.enter().append('path').attr('class',$$.classLine.bind($$)).style("stroke",$$.color);$$.mainLine.style("opacity",$$.initialOpacity.bind($$)).style('shape-rendering',function(d){return $$.isStepType(d)?'crispEdges':'';}).attr('transform',null);$$.mainLine.exit().transition().duration(durationForExit).style('opacity',0).remove();};c3_chart_internal_fn.redrawLine=function(drawLine,withTransition){return[(withTransition?this.mainLine.transition(Math.random().toString()):this.mainLine).attr("d",drawLine).style("stroke",this.color).style("opacity",1)];};c3_chart_internal_fn.generateDrawLine=function(lineIndices,isSub){var $$=this,config=$$.config,line=$$.d3.svg.line(),getPoints=$$.generateGetLinePoints(lineIndices,isSub),yScaleGetter=isSub?$$.getSubYScale:$$.getYScale,xValue=function xValue(d){return(isSub?$$.subxx:$$.xx).call($$,d);},yValue=function yValue(d,i){return config.data_groups.length>0?getPoints(d,i)[0][1]:yScaleGetter.call($$,d.id)(d.value);};line=config.axis_rotated?line.x(yValue).y(xValue):line.x(xValue).y(yValue);if(!config.line_connectNull){line=line.defined(function(d){return d.value!=null;});}return function(d){var values=config.line_connectNull?$$.filterRemoveNull(d.values):d.values,x=isSub?$$.x:$$.subX,y=yScaleGetter.call($$,d.id),x0=0,y0=0,path;if($$.isLineType(d)){if(config.data_regions[d.id]){path=$$.lineWithRegions(values,x,y,config.data_regions[d.id]);}else{if($$.isStepType(d)){values=$$.convertValuesToStep(values);}path=line.interpolate($$.getInterpolate(d))(values);}}else{if(values[0]){x0=x(values[0].x);y0=y(values[0].value);}path=config.axis_rotated?"M "+y0+" "+x0:"M "+x0+" "+y0;}return path?path:"M 0 0";};};c3_chart_internal_fn.generateGetLinePoints=function(lineIndices,isSub){// partial duplication of generateGetBarPoints +var $$=this,config=$$.config,lineTargetsNum=lineIndices.__max__+1,x=$$.getShapeX(0,lineTargetsNum,lineIndices,!!isSub),y=$$.getShapeY(!!isSub),lineOffset=$$.getShapeOffset($$.isLineType,lineIndices,!!isSub),yScale=isSub?$$.getSubYScale:$$.getYScale;return function(d,i){var y0=yScale.call($$,d.id)(0),offset=lineOffset(d,i)||y0,// offset is for stacked area chart +posX=x(d),posY=y(d);// fix posY not to overflow opposite quadrant +if(config.axis_rotated){if(00?getPoints(d,i)[0][1]:yScaleGetter.call($$,d.id)($$.getAreaBaseValue(d.id));},value1=function value1(d,i){return config.data_groups.length>0?getPoints(d,i)[1][1]:yScaleGetter.call($$,d.id)(d.value);};area=config.axis_rotated?area.x0(value0).x1(value1).y(xValue):area.x(xValue).y0(config.area_above?0:value0).y1(value1);if(!config.line_connectNull){area=area.defined(function(d){return d.value!==null;});}return function(d){var values=config.line_connectNull?$$.filterRemoveNull(d.values):d.values,x0=0,y0=0,path;if($$.isAreaType(d)){if($$.isStepType(d)){values=$$.convertValuesToStep(values);}path=area.interpolate($$.getInterpolate(d))(values);}else{if(values[0]){x0=$$.x(values[0].x);y0=$$.getYScale(d.id)(values[0].value);}path=config.axis_rotated?"M "+y0+" "+x0:"M "+x0+" "+y0;}return path?path:"M 0 0";};};c3_chart_internal_fn.getAreaBaseValue=function(){return 0;};c3_chart_internal_fn.generateGetAreaPoints=function(areaIndices,isSub){// partial duplication of generateGetBarPoints +var $$=this,config=$$.config,areaTargetsNum=areaIndices.__max__+1,x=$$.getShapeX(0,areaTargetsNum,areaIndices,!!isSub),y=$$.getShapeY(!!isSub),areaOffset=$$.getShapeOffset($$.isAreaType,areaIndices,!!isSub),yScale=isSub?$$.getSubYScale:$$.getYScale;return function(d,i){var y0=yScale.call($$,d.id)(0),offset=areaOffset(d,i)||y0,// offset is for stacked area chart +posX=x(d),posY=y(d);// fix posY not to overflow opposite quadrant +if(config.axis_rotated){if(00){lineIndices=$$.getShapeIndices($$.isLineType),getPoints=$$.generateGetLinePoints(lineIndices);$$.circleY=function(d,i){return getPoints(d,i)[0][1];};}else{$$.circleY=function(d){return $$.getYScale(d.id)(d.value);};}};c3_chart_internal_fn.getCircles=function(i,id){var $$=this;return(id?$$.main.selectAll('.'+CLASS.circles+$$.getTargetSelectorSuffix(id)):$$.main).selectAll('.'+CLASS.circle+(isValue(i)?'-'+i:''));};c3_chart_internal_fn.expandCircles=function(i,id,reset){var $$=this,r=$$.pointExpandedR.bind($$);if(reset){$$.unexpandCircles();}$$.getCircles(i,id).classed(CLASS.EXPANDED,true).attr('r',r);};c3_chart_internal_fn.unexpandCircles=function(i){var $$=this,r=$$.pointR.bind($$);$$.getCircles(i).filter(function(){return $$.d3.select(this).classed(CLASS.EXPANDED);}).classed(CLASS.EXPANDED,false).attr('r',r);};c3_chart_internal_fn.pointR=function(d){var $$=this,config=$$.config;return $$.isStepType(d)?0:isFunction(config.point_r)?config.point_r(d):config.point_r;};c3_chart_internal_fn.pointExpandedR=function(d){var $$=this,config=$$.config;return config.point_focus_expand_enabled?config.point_focus_expand_r?config.point_focus_expand_r:$$.pointR(d)*1.75:$$.pointR(d);};c3_chart_internal_fn.pointSelectR=function(d){var $$=this,config=$$.config;return isFunction(config.point_select_r)?config.point_select_r(d):config.point_select_r?config.point_select_r:$$.pointR(d)*4;};c3_chart_internal_fn.isWithinCircle=function(that,r){var d3$$1=this.d3,mouse=d3$$1.mouse(that),d3_this=d3$$1.select(that),cx=+d3_this.attr("cx"),cy=+d3_this.attr("cy");return Math.sqrt(Math.pow(cx-mouse[0],2)+Math.pow(cy-mouse[1],2))config.bar_width_max?config.bar_width_max:w;};c3_chart_internal_fn.getBars=function(i,id){var $$=this;return(id?$$.main.selectAll('.'+CLASS.bars+$$.getTargetSelectorSuffix(id)):$$.main).selectAll('.'+CLASS.bar+(isValue(i)?'-'+i:''));};c3_chart_internal_fn.expandBars=function(i,id,reset){var $$=this;if(reset){$$.unexpandBars();}$$.getBars(i,id).classed(CLASS.EXPANDED,true);};c3_chart_internal_fn.unexpandBars=function(i){var $$=this;$$.getBars(i).classed(CLASS.EXPANDED,false);};c3_chart_internal_fn.generateDrawBar=function(barIndices,isSub){var $$=this,config=$$.config,getPoints=$$.generateGetBarPoints(barIndices,isSub);return function(d,i){// 4 points that make a bar +var points=getPoints(d,i);// switch points if axis is rotated, not applicable for sub chart +var indexX=config.axis_rotated?1:0;var indexY=config.axis_rotated?0:1;var path='M '+points[0][indexX]+','+points[0][indexY]+' '+'L'+points[1][indexX]+','+points[1][indexY]+' '+'L'+points[2][indexX]+','+points[2][indexY]+' '+'L'+points[3][indexX]+','+points[3][indexY]+' '+'z';return path;};};c3_chart_internal_fn.generateGetBarPoints=function(barIndices,isSub){var $$=this,axis=isSub?$$.subXAxis:$$.xAxis,barTargetsNum=barIndices.__max__+1,barW=$$.getBarW(axis,barTargetsNum),barX=$$.getShapeX(barW,barTargetsNum,barIndices,!!isSub),barY=$$.getShapeY(!!isSub),barOffset=$$.getShapeOffset($$.isBarType,barIndices,!!isSub),yScale=isSub?$$.getSubYScale:$$.getYScale;return function(d,i){var y0=yScale.call($$,d.id)(0),offset=barOffset(d,i)||y0,// offset is for stacked bar chart +posX=barX(d),posY=barY(d);// fix posY not to overflow opposite quadrant +if($$.config.axis_rotated){if(0$$.width){xPos=$$.width-box.width;}else if(xPos<0){xPos=4;}}return xPos;};c3_chart_internal_fn.getYForText=function(points,d,textElement){var $$=this,box=textElement.getBoundingClientRect(),yPos;if($$.config.axis_rotated){yPos=(points[0][0]+points[2][0]+box.height*0.6)/2;}else{yPos=points[2][1];if(d.value<0||d.value===0&&!$$.hasPositiveValue){yPos+=box.height;if($$.isBarType(d)&&$$.isSafari()){yPos-=3;}else if(!$$.isBarType(d)&&$$.isChrome()){yPos+=3;}}else{yPos+=$$.isBarType(d)?-3:-6;}}// show labels regardless of the domain if value is null +if(d.value===null&&!$$.config.axis_rotated){if(yPosthis.height){yPos=this.height-4;}}return yPos;};c3_chart_internal_fn.setTargetType=function(targetIds,type){var $$=this,config=$$.config;$$.mapToTargetIds(targetIds).forEach(function(id){$$.withoutFadeIn[id]=type===config.data_types[id];config.data_types[id]=type;});if(!targetIds){config.data_type=type;}};c3_chart_internal_fn.hasType=function(type,targets){var $$=this,types=$$.config.data_types,has=false;targets=targets||$$.data.targets;if(targets&&targets.length){targets.forEach(function(target){var t=types[target.id];if(t&&t.indexOf(type)>=0||!t&&type==='line'){has=true;}});}else if(Object.keys(types).length){Object.keys(types).forEach(function(id){if(types[id]===type){has=true;}});}else{has=$$.config.data_type===type;}return has;};c3_chart_internal_fn.hasArcType=function(targets){return this.hasType('pie',targets)||this.hasType('donut',targets)||this.hasType('gauge',targets);};c3_chart_internal_fn.isLineType=function(d){var config=this.config,id=isString(d)?d:d.id;return!config.data_types[id]||['line','spline','area','area-spline','step','area-step'].indexOf(config.data_types[id])>=0;};c3_chart_internal_fn.isStepType=function(d){var id=isString(d)?d:d.id;return['step','area-step'].indexOf(this.config.data_types[id])>=0;};c3_chart_internal_fn.isSplineType=function(d){var id=isString(d)?d:d.id;return['spline','area-spline'].indexOf(this.config.data_types[id])>=0;};c3_chart_internal_fn.isAreaType=function(d){var id=isString(d)?d:d.id;return['area','area-spline','area-step'].indexOf(this.config.data_types[id])>=0;};c3_chart_internal_fn.isBarType=function(d){var id=isString(d)?d:d.id;return this.config.data_types[id]==='bar';};c3_chart_internal_fn.isScatterType=function(d){var id=isString(d)?d:d.id;return this.config.data_types[id]==='scatter';};c3_chart_internal_fn.isPieType=function(d){var id=isString(d)?d:d.id;return this.config.data_types[id]==='pie';};c3_chart_internal_fn.isGaugeType=function(d){var id=isString(d)?d:d.id;return this.config.data_types[id]==='gauge';};c3_chart_internal_fn.isDonutType=function(d){var id=isString(d)?d:d.id;return this.config.data_types[id]==='donut';};c3_chart_internal_fn.isArcType=function(d){return this.isPieType(d)||this.isDonutType(d)||this.isGaugeType(d);};c3_chart_internal_fn.lineData=function(d){return this.isLineType(d)?[d]:[];};c3_chart_internal_fn.arcData=function(d){return this.isArcType(d.data)?[d]:[];};/* not used + function scatterData(d) { + return isScatterType(d) ? d.values : []; + } + */c3_chart_internal_fn.barData=function(d){return this.isBarType(d)?d.values:[];};c3_chart_internal_fn.lineOrScatterData=function(d){return this.isLineType(d)||this.isScatterType(d)?d.values:[];};c3_chart_internal_fn.barOrLineData=function(d){return this.isBarType(d)||this.isLineType(d)?d.values:[];};c3_chart_internal_fn.isInterpolationType=function(type){return['linear','linear-closed','basis','basis-open','basis-closed','bundle','cardinal','cardinal-open','cardinal-closed','monotone'].indexOf(type)>=0;};c3_chart_internal_fn.initGrid=function(){var $$=this,config=$$.config,d3$$1=$$.d3;$$.grid=$$.main.append('g').attr("clip-path",$$.clipPathForGrid).attr('class',CLASS.grid);if(config.grid_x_show){$$.grid.append("g").attr("class",CLASS.xgrids);}if(config.grid_y_show){$$.grid.append('g').attr('class',CLASS.ygrids);}if(config.grid_focus_show){$$.grid.append('g').attr("class",CLASS.xgridFocus).append('line').attr('class',CLASS.xgridFocus);}$$.xgrid=d3$$1.selectAll([]);if(!config.grid_lines_front){$$.initGridLines();}};c3_chart_internal_fn.initGridLines=function(){var $$=this,d3$$1=$$.d3;$$.gridLines=$$.main.append('g').attr("clip-path",$$.clipPathForGrid).attr('class',CLASS.grid+' '+CLASS.gridLines);$$.gridLines.append('g').attr("class",CLASS.xgridLines);$$.gridLines.append('g').attr('class',CLASS.ygridLines);$$.xgridLines=d3$$1.selectAll([]);};c3_chart_internal_fn.updateXGrid=function(withoutUpdate){var $$=this,config=$$.config,d3$$1=$$.d3,xgridData=$$.generateGridData(config.grid_x_type,$$.x),tickOffset=$$.isCategorized()?$$.xAxis.tickOffset():0;$$.xgridAttr=config.axis_rotated?{'x1':0,'x2':$$.width,'y1':function y1(d){return $$.x(d)-tickOffset;},'y2':function y2(d){return $$.x(d)-tickOffset;}}:{'x1':function x1(d){return $$.x(d)+tickOffset;},'x2':function x2(d){return $$.x(d)+tickOffset;},'y1':0,'y2':$$.height};$$.xgrid=$$.main.select('.'+CLASS.xgrids).selectAll('.'+CLASS.xgrid).data(xgridData);$$.xgrid.enter().append('line').attr("class",CLASS.xgrid);if(!withoutUpdate){$$.xgrid.attr($$.xgridAttr).style("opacity",function(){return+d3$$1.select(this).attr(config.axis_rotated?'y1':'x1')===(config.axis_rotated?$$.height:0)?0:1;});}$$.xgrid.exit().remove();};c3_chart_internal_fn.updateYGrid=function(){var $$=this,config=$$.config,gridValues=$$.yAxis.tickValues()||$$.y.ticks(config.grid_y_ticks);$$.ygrid=$$.main.select('.'+CLASS.ygrids).selectAll('.'+CLASS.ygrid).data(gridValues);$$.ygrid.enter().append('line').attr('class',CLASS.ygrid);$$.ygrid.attr("x1",config.axis_rotated?$$.y:0).attr("x2",config.axis_rotated?$$.y:$$.width).attr("y1",config.axis_rotated?0:$$.y).attr("y2",config.axis_rotated?$$.height:$$.y);$$.ygrid.exit().remove();$$.smoothLines($$.ygrid,'grid');};c3_chart_internal_fn.gridTextAnchor=function(d){return d.position?d.position:"end";};c3_chart_internal_fn.gridTextDx=function(d){return d.position==='start'?4:d.position==='middle'?0:-4;};c3_chart_internal_fn.xGridTextX=function(d){return d.position==='start'?-this.height:d.position==='middle'?-this.height/2:0;};c3_chart_internal_fn.yGridTextX=function(d){return d.position==='start'?0:d.position==='middle'?this.width/2:this.width;};c3_chart_internal_fn.updateGrid=function(duration){var $$=this,main=$$.main,config=$$.config,xgridLine,ygridLine,yv;// hide if arc type +$$.grid.style('visibility',$$.hasArcType()?'hidden':'visible');main.select('line.'+CLASS.xgridFocus).style("visibility","hidden");if(config.grid_x_show){$$.updateXGrid();}$$.xgridLines=main.select('.'+CLASS.xgridLines).selectAll('.'+CLASS.xgridLine).data(config.grid_x_lines);// enter +xgridLine=$$.xgridLines.enter().append('g').attr("class",function(d){return CLASS.xgridLine+(d['class']?' '+d['class']:'');});xgridLine.append('line').style("opacity",0);xgridLine.append('text').attr("text-anchor",$$.gridTextAnchor).attr("transform",config.axis_rotated?"":"rotate(-90)").attr('dx',$$.gridTextDx).attr('dy',-5).style("opacity",0);// udpate +// done in d3.transition() of the end of this function +// exit +$$.xgridLines.exit().transition().duration(duration).style("opacity",0).remove();// Y-Grid +if(config.grid_y_show){$$.updateYGrid();}$$.ygridLines=main.select('.'+CLASS.ygridLines).selectAll('.'+CLASS.ygridLine).data(config.grid_y_lines);// enter +ygridLine=$$.ygridLines.enter().append('g').attr("class",function(d){return CLASS.ygridLine+(d['class']?' '+d['class']:'');});ygridLine.append('line').style("opacity",0);ygridLine.append('text').attr("text-anchor",$$.gridTextAnchor).attr("transform",config.axis_rotated?"rotate(-90)":"").attr('dx',$$.gridTextDx).attr('dy',-5).style("opacity",0);// update +yv=$$.yv.bind($$);$$.ygridLines.select('line').transition().duration(duration).attr("x1",config.axis_rotated?yv:0).attr("x2",config.axis_rotated?yv:$$.width).attr("y1",config.axis_rotated?0:yv).attr("y2",config.axis_rotated?$$.height:yv).style("opacity",1);$$.ygridLines.select('text').transition().duration(duration).attr("x",config.axis_rotated?$$.xGridTextX.bind($$):$$.yGridTextX.bind($$)).attr("y",yv).text(function(d){return d.text;}).style("opacity",1);// exit +$$.ygridLines.exit().transition().duration(duration).style("opacity",0).remove();};c3_chart_internal_fn.redrawGrid=function(withTransition){var $$=this,config=$$.config,xv=$$.xv.bind($$),lines=$$.xgridLines.select('line'),texts=$$.xgridLines.select('text');return[(withTransition?lines.transition():lines).attr("x1",config.axis_rotated?0:xv).attr("x2",config.axis_rotated?$$.width:xv).attr("y1",config.axis_rotated?xv:0).attr("y2",config.axis_rotated?xv:$$.height).style("opacity",1),(withTransition?texts.transition():texts).attr("x",config.axis_rotated?$$.yGridTextX.bind($$):$$.xGridTextX.bind($$)).attr("y",xv).text(function(d){return d.text;}).style("opacity",1)];};c3_chart_internal_fn.showXGridFocus=function(selectedData){var $$=this,config=$$.config,dataToShow=selectedData.filter(function(d){return d&&isValue(d.value);}),focusEl=$$.main.selectAll('line.'+CLASS.xgridFocus),xx=$$.xx.bind($$);if(!config.tooltip_show){return;}// Hide when scatter plot exists +if($$.hasType('scatter')||$$.hasArcType()){return;}focusEl.style("visibility","visible").data([dataToShow[0]]).attr(config.axis_rotated?'y1':'x1',xx).attr(config.axis_rotated?'y2':'x2',xx);$$.smoothLines(focusEl,'grid');};c3_chart_internal_fn.hideXGridFocus=function(){this.main.select('line.'+CLASS.xgridFocus).style("visibility","hidden");};c3_chart_internal_fn.updateXgridFocus=function(){var $$=this,config=$$.config;$$.main.select('line.'+CLASS.xgridFocus).attr("x1",config.axis_rotated?0:-10).attr("x2",config.axis_rotated?$$.width:-10).attr("y1",config.axis_rotated?-10:0).attr("y2",config.axis_rotated?-10:$$.height);};c3_chart_internal_fn.generateGridData=function(type,scale){var $$=this,gridData=[],xDomain,firstYear,lastYear,i,tickNum=$$.main.select("."+CLASS.axisX).selectAll('.tick').size();if(type==='year'){xDomain=$$.getXDomain();firstYear=xDomain[0].getFullYear();lastYear=xDomain[1].getFullYear();for(i=firstYear;i<=lastYear;i++){gridData.push(new Date(i+'-01-01 00:00:00'));}}else{gridData=scale.ticks(10);if(gridData.length>tickNum){// use only int +gridData=gridData.filter(function(d){return(""+d).indexOf('.')<0;});}}return gridData;};c3_chart_internal_fn.getGridFilterToRemove=function(params){return params?function(line){var found=false;[].concat(params).forEach(function(param){if('value'in param&&line.value===param.value||'class'in param&&line['class']===param['class']){found=true;}});return found;}:function(){return true;};};c3_chart_internal_fn.removeGridLines=function(params,forX){var $$=this,config=$$.config,toRemove=$$.getGridFilterToRemove(params),toShow=function toShow(line){return!toRemove(line);},classLines=forX?CLASS.xgridLines:CLASS.ygridLines,classLine=forX?CLASS.xgridLine:CLASS.ygridLine;$$.main.select('.'+classLines).selectAll('.'+classLine).filter(toRemove).transition().duration(config.transition_duration).style('opacity',0).remove();if(forX){config.grid_x_lines=config.grid_x_lines.filter(toShow);}else{config.grid_y_lines=config.grid_y_lines.filter(toShow);}};c3_chart_internal_fn.initTooltip=function(){var $$=this,config=$$.config,i;$$.tooltip=$$.selectChart.style("position","relative").append("div").attr('class',CLASS.tooltipContainer).style("position","absolute").style("pointer-events","none").style("display","none");// Show tooltip if needed +if(config.tooltip_init_show){if($$.isTimeSeries()&&isString(config.tooltip_init_x)){config.tooltip_init_x=$$.parseDate(config.tooltip_init_x);for(i=0;i<$$.data.targets[0].values.length;i++){if($$.data.targets[0].values[i].x-config.tooltip_init_x===0){break;}}config.tooltip_init_x=i;}$$.tooltip.html(config.tooltip_contents.call($$,$$.data.targets.map(function(d){return $$.addName(d.values[config.tooltip_init_x]);}),$$.axis.getXAxisTickFormat(),$$.getYFormat($$.hasArcType()),$$.color));$$.tooltip.style("top",config.tooltip_init_position.top).style("left",config.tooltip_init_position.left).style("display","block");}};c3_chart_internal_fn.getTooltipContent=function(d,defaultTitleFormat,defaultValueFormat,color){var $$=this,config=$$.config,titleFormat=config.tooltip_format_title||defaultTitleFormat,nameFormat=config.tooltip_format_name||function(name){return name;},valueFormat=config.tooltip_format_value||defaultValueFormat,text,i,title,value,name,bgcolor,orderAsc=$$.isOrderAsc();if(config.data_groups.length===0){d.sort(function(a,b){var v1=a?a.value:null,v2=b?b.value:null;return orderAsc?v1-v2:v2-v1;});}else{var ids=$$.orderTargets($$.data.targets).map(function(i){return i.id;});d.sort(function(a,b){var v1=a?a.value:null,v2=b?b.value:null;if(v1>0&&v2>0){v1=a?ids.indexOf(a.id):null;v2=b?ids.indexOf(b.id):null;}return orderAsc?v1-v2:v2-v1;});}for(i=0;i"+(title||title===0?""+title+"":"");}value=sanitise(valueFormat(d[i].value,d[i].ratio,d[i].id,d[i].index,d));if(value!==undefined){// Skip elements when their name is set to null +if(d[i].name===null){continue;}name=sanitise(nameFormat(d[i].name,d[i].ratio,d[i].id,d[i].index));bgcolor=$$.levelColor?$$.levelColor(d[i].value):color(d[i].id);text+="";text+=""+name+"";text+=""+value+"";text+="";}}return text+"";};c3_chart_internal_fn.tooltipPosition=function(dataToShow,tWidth,tHeight,element){var $$=this,config=$$.config,d3$$1=$$.d3;var svgLeft,tooltipLeft,tooltipRight,tooltipTop,chartRight;var forArc=$$.hasArcType(),mouse=d3$$1.mouse(element);// Determin tooltip position +if(forArc){tooltipLeft=($$.width-($$.isLegendRight?$$.getLegendWidth():0))/2+mouse[0];tooltipTop=$$.height/2+mouse[1]+20;}else{svgLeft=$$.getSvgLeft(true);if(config.axis_rotated){tooltipLeft=svgLeft+mouse[0]+100;tooltipRight=tooltipLeft+tWidth;chartRight=$$.currentWidth-$$.getCurrentPaddingRight();tooltipTop=$$.x(dataToShow[0].x)+20;}else{tooltipLeft=svgLeft+$$.getCurrentPaddingLeft(true)+$$.x(dataToShow[0].x)+20;tooltipRight=tooltipLeft+tWidth;chartRight=svgLeft+$$.currentWidth-$$.getCurrentPaddingRight();tooltipTop=mouse[1]+15;}if(tooltipRight>chartRight){// 20 is needed for Firefox to keep tooltip width +tooltipLeft-=tooltipRight-chartRight+20;}if(tooltipTop+tHeight>$$.currentHeight){tooltipTop-=tHeight+30;}}if(tooltipTop<0){tooltipTop=0;}return{top:tooltipTop,left:tooltipLeft};};c3_chart_internal_fn.showTooltip=function(selectedData,element){var $$=this,config=$$.config;var tWidth,tHeight,position;var forArc=$$.hasArcType(),dataToShow=selectedData.filter(function(d){return d&&isValue(d.value);}),positionFunction=config.tooltip_position||c3_chart_internal_fn.tooltipPosition;if(dataToShow.length===0||!config.tooltip_show){return;}$$.tooltip.html(config.tooltip_contents.call($$,selectedData,$$.axis.getXAxisTickFormat(),$$.getYFormat(forArc),$$.color)).style("display","block");// Get tooltip dimensions +tWidth=$$.tooltip.property('offsetWidth');tHeight=$$.tooltip.property('offsetHeight');position=positionFunction.call(this,dataToShow,tWidth,tHeight,element);// Set tooltip +$$.tooltip.style("top",position.top+"px").style("left",position.left+'px');};c3_chart_internal_fn.hideTooltip=function(){this.tooltip.style("display","none");};c3_chart_internal_fn.initLegend=function(){var $$=this;$$.legendItemTextBox={};$$.legendHasRendered=false;$$.legend=$$.svg.append("g").attr("transform",$$.getTranslate('legend'));if(!$$.config.legend_show){$$.legend.style('visibility','hidden');$$.hiddenLegendIds=$$.mapToIds($$.data.targets);return;}// MEMO: call here to update legend box and tranlate for all +// MEMO: translate will be upated by this, so transform not needed in updateLegend() +$$.updateLegendWithDefaults();};c3_chart_internal_fn.updateLegendWithDefaults=function(){var $$=this;$$.updateLegend($$.mapToIds($$.data.targets),{withTransform:false,withTransitionForTransform:false,withTransition:false});};c3_chart_internal_fn.updateSizeForLegend=function(legendHeight,legendWidth){var $$=this,config=$$.config,insetLegendPosition={top:$$.isLegendTop?$$.getCurrentPaddingTop()+config.legend_inset_y+5.5:$$.currentHeight-legendHeight-$$.getCurrentPaddingBottom()-config.legend_inset_y,left:$$.isLegendLeft?$$.getCurrentPaddingLeft()+config.legend_inset_x+0.5:$$.currentWidth-legendWidth-$$.getCurrentPaddingRight()-config.legend_inset_x+0.5};$$.margin3={top:$$.isLegendRight?0:$$.isLegendInset?insetLegendPosition.top:$$.currentHeight-legendHeight,right:NaN,bottom:0,left:$$.isLegendRight?$$.currentWidth-legendWidth:$$.isLegendInset?insetLegendPosition.left:0};};c3_chart_internal_fn.transformLegend=function(withTransition){var $$=this;(withTransition?$$.legend.transition():$$.legend).attr("transform",$$.getTranslate('legend'));};c3_chart_internal_fn.updateLegendStep=function(step){this.legendStep=step;};c3_chart_internal_fn.updateLegendItemWidth=function(w){this.legendItemWidth=w;};c3_chart_internal_fn.updateLegendItemHeight=function(h){this.legendItemHeight=h;};c3_chart_internal_fn.getLegendWidth=function(){var $$=this;return $$.config.legend_show?$$.isLegendRight||$$.isLegendInset?$$.legendItemWidth*($$.legendStep+1):$$.currentWidth:0;};c3_chart_internal_fn.getLegendHeight=function(){var $$=this,h=0;if($$.config.legend_show){if($$.isLegendRight){h=$$.currentHeight;}else{h=Math.max(20,$$.legendItemHeight)*($$.legendStep+1);}}return h;};c3_chart_internal_fn.opacityForLegend=function(legendItem){return legendItem.classed(CLASS.legendItemHidden)?null:1;};c3_chart_internal_fn.opacityForUnfocusedLegend=function(legendItem){return legendItem.classed(CLASS.legendItemHidden)?null:0.3;};c3_chart_internal_fn.toggleFocusLegend=function(targetIds,focus){var $$=this;targetIds=$$.mapToTargetIds(targetIds);$$.legend.selectAll('.'+CLASS.legendItem).filter(function(id){return targetIds.indexOf(id)>=0;}).classed(CLASS.legendItemFocused,focus).transition().duration(100).style('opacity',function(){var opacity=focus?$$.opacityForLegend:$$.opacityForUnfocusedLegend;return opacity.call($$,$$.d3.select(this));});};c3_chart_internal_fn.revertLegend=function(){var $$=this,d3$$1=$$.d3;$$.legend.selectAll('.'+CLASS.legendItem).classed(CLASS.legendItemFocused,false).transition().duration(100).style('opacity',function(){return $$.opacityForLegend(d3$$1.select(this));});};c3_chart_internal_fn.showLegend=function(targetIds){var $$=this,config=$$.config;if(!config.legend_show){config.legend_show=true;$$.legend.style('visibility','visible');if(!$$.legendHasRendered){$$.updateLegendWithDefaults();}}$$.removeHiddenLegendIds(targetIds);$$.legend.selectAll($$.selectorLegends(targetIds)).style('visibility','visible').transition().style('opacity',function(){return $$.opacityForLegend($$.d3.select(this));});};c3_chart_internal_fn.hideLegend=function(targetIds){var $$=this,config=$$.config;if(config.legend_show&&isEmpty(targetIds)){config.legend_show=false;$$.legend.style('visibility','hidden');}$$.addHiddenLegendIds(targetIds);$$.legend.selectAll($$.selectorLegends(targetIds)).style('opacity',0).style('visibility','hidden');};c3_chart_internal_fn.clearLegendItemTextBoxCache=function(){this.legendItemTextBox={};};c3_chart_internal_fn.updateLegend=function(targetIds,options,transitions){var $$=this,config=$$.config;var xForLegend,xForLegendText,xForLegendRect,yForLegend,yForLegendText,yForLegendRect,x1ForLegendTile,x2ForLegendTile,yForLegendTile;var paddingTop=4,paddingRight=10,maxWidth=0,maxHeight=0,posMin=10,tileWidth=config.legend_item_tile_width+5;var l,totalLength=0,offsets={},widths={},heights={},margins=[0],steps={},step=0;var withTransition,withTransitionForTransform;var texts,rects,tiles,background;// Skip elements when their name is set to null +targetIds=targetIds.filter(function(id){return!isDefined(config.data_names[id])||config.data_names[id]!==null;});options=options||{};withTransition=getOption(options,"withTransition",true);withTransitionForTransform=getOption(options,"withTransitionForTransform",true);function getTextBox(textElement,id){if(!$$.legendItemTextBox[id]){$$.legendItemTextBox[id]=$$.getTextRect(textElement.textContent,CLASS.legendItem,textElement);}return $$.legendItemTextBox[id];}function updatePositions(textElement,id,index){var reset=index===0,isLast=index===targetIds.length-1,box=getTextBox(textElement,id),itemWidth=box.width+tileWidth+(isLast&&!($$.isLegendRight||$$.isLegendInset)?0:paddingRight)+config.legend_padding,itemHeight=box.height+paddingTop,itemLength=$$.isLegendRight||$$.isLegendInset?itemHeight:itemWidth,areaLength=$$.isLegendRight||$$.isLegendInset?$$.getLegendHeight():$$.getLegendWidth(),margin,maxLength;// MEMO: care about condifion of step, totalLength +function updateValues(id,withoutStep){if(!withoutStep){margin=(areaLength-totalLength-itemLength)/2;if(margin=maxWidth){maxWidth=itemWidth;}if(!maxHeight||itemHeight>=maxHeight){maxHeight=itemHeight;}maxLength=$$.isLegendRight||$$.isLegendInset?maxHeight:maxWidth;if(config.legend_equally){Object.keys(widths).forEach(function(id){widths[id]=maxWidth;});Object.keys(heights).forEach(function(id){heights[id]=maxHeight;});margin=(areaLength-maxLength*targetIds.length)/2;if(margin0&&background.size()===0){background=$$.legend.insert('g','.'+CLASS.legendItem).attr("class",CLASS.legendBackground).append('rect');}texts=$$.legend.selectAll('text').data(targetIds).text(function(id){return isDefined(config.data_names[id])?config.data_names[id]:id;})// MEMO: needed for update +.each(function(id,i){updatePositions(this,id,i);});(withTransition?texts.transition():texts).attr('x',xForLegendText).attr('y',yForLegendText);rects=$$.legend.selectAll('rect.'+CLASS.legendItemEvent).data(targetIds);(withTransition?rects.transition():rects).attr('width',function(id){return widths[id];}).attr('height',function(id){return heights[id];}).attr('x',xForLegendRect).attr('y',yForLegendRect);tiles=$$.legend.selectAll('line.'+CLASS.legendItemTile).data(targetIds);(withTransition?tiles.transition():tiles).style('stroke',$$.color).attr('x1',x1ForLegendTile).attr('y1',yForLegendTile).attr('x2',x2ForLegendTile).attr('y2',yForLegendTile);if(background){(withTransition?background.transition():background).attr('height',$$.getLegendHeight()-12).attr('width',maxWidth*(step+1)+10);}// toggle legend state +$$.legend.selectAll('.'+CLASS.legendItem).classed(CLASS.legendItemHidden,function(id){return!$$.isTargetToShow(id);});// Update all to reflect change of legend +$$.updateLegendItemWidth(maxWidth);$$.updateLegendItemHeight(maxHeight);$$.updateLegendStep(step);// Update size and scale +$$.updateSizes();$$.updateScales();$$.updateSvgSize();// Update g positions +$$.transformAll(withTransitionForTransform,transitions);$$.legendHasRendered=true;};c3_chart_internal_fn.initTitle=function(){var $$=this;$$.title=$$.svg.append("text").text($$.config.title_text).attr("class",$$.CLASS.title);};c3_chart_internal_fn.redrawTitle=function(){var $$=this;$$.title.attr("x",$$.xForTitle.bind($$)).attr("y",$$.yForTitle.bind($$));};c3_chart_internal_fn.xForTitle=function(){var $$=this,config=$$.config,position=config.title_position||'left',x;if(position.indexOf('right')>=0){x=$$.currentWidth-$$.getTextRect($$.title.node().textContent,$$.CLASS.title,$$.title.node()).width-config.title_padding.right;}else if(position.indexOf('center')>=0){x=($$.currentWidth-$$.getTextRect($$.title.node().textContent,$$.CLASS.title,$$.title.node()).width)/2;}else{// left +x=config.title_padding.left;}return x;};c3_chart_internal_fn.yForTitle=function(){var $$=this;return $$.config.title_padding.top+$$.getTextRect($$.title.node().textContent,$$.CLASS.title,$$.title.node()).height;};c3_chart_internal_fn.getTitlePadding=function(){var $$=this;return $$.yForTitle()+$$.config.title_padding.bottom;};c3_chart_internal_fn.getClipPath=function(id){var isIE9=window.navigator.appVersion.toLowerCase().indexOf("msie 9.")>=0;return"url("+(isIE9?"":document.URL.split('#')[0])+"#"+id+")";};c3_chart_internal_fn.appendClip=function(parent,id){return parent.append("clipPath").attr("id",id).append("rect");};c3_chart_internal_fn.getAxisClipX=function(forHorizontal){// axis line width + padding for left +var left=Math.max(30,this.margin.left);return forHorizontal?-(1+left):-(left-1);};c3_chart_internal_fn.getAxisClipY=function(forHorizontal){return forHorizontal?-20:-this.margin.top;};c3_chart_internal_fn.getXAxisClipX=function(){var $$=this;return $$.getAxisClipX(!$$.config.axis_rotated);};c3_chart_internal_fn.getXAxisClipY=function(){var $$=this;return $$.getAxisClipY(!$$.config.axis_rotated);};c3_chart_internal_fn.getYAxisClipX=function(){var $$=this;return $$.config.axis_y_inner?-1:$$.getAxisClipX($$.config.axis_rotated);};c3_chart_internal_fn.getYAxisClipY=function(){var $$=this;return $$.getAxisClipY($$.config.axis_rotated);};c3_chart_internal_fn.getAxisClipWidth=function(forHorizontal){var $$=this,left=Math.max(30,$$.margin.left),right=Math.max(30,$$.margin.right);// width + axis line width + padding for left/right +return forHorizontal?$$.width+2+left+right:$$.margin.left+20;};c3_chart_internal_fn.getAxisClipHeight=function(forHorizontal){// less than 20 is not enough to show the axis label 'outer' without legend +return(forHorizontal?this.margin.bottom:this.margin.top+this.height)+20;};c3_chart_internal_fn.getXAxisClipWidth=function(){var $$=this;return $$.getAxisClipWidth(!$$.config.axis_rotated);};c3_chart_internal_fn.getXAxisClipHeight=function(){var $$=this;return $$.getAxisClipHeight(!$$.config.axis_rotated);};c3_chart_internal_fn.getYAxisClipWidth=function(){var $$=this;return $$.getAxisClipWidth($$.config.axis_rotated)+($$.config.axis_y_inner?20:0);};c3_chart_internal_fn.getYAxisClipHeight=function(){var $$=this;return $$.getAxisClipHeight($$.config.axis_rotated);};c3_chart_internal_fn.initPie=function(){var $$=this,d3$$1=$$.d3,config=$$.config;$$.pie=d3$$1.layout.pie().value(function(d){return d.values.reduce(function(a,b){return a+b.value;},0);});if(!config.data_order){$$.pie.sort(null);}};c3_chart_internal_fn.updateRadius=function(){var $$=this,config=$$.config,w=config.gauge_width||config.donut_width;$$.radiusExpanded=Math.min($$.arcWidth,$$.arcHeight)/2;$$.radius=$$.radiusExpanded*0.95;$$.innerRadiusRatio=w?($$.radius-w)/$$.radius:0.6;$$.innerRadius=$$.hasType('donut')||$$.hasType('gauge')?$$.radius*$$.innerRadiusRatio:0;};c3_chart_internal_fn.updateArc=function(){var $$=this;$$.svgArc=$$.getSvgArc();$$.svgArcExpanded=$$.getSvgArcExpanded();$$.svgArcExpandedSub=$$.getSvgArcExpanded(0.98);};c3_chart_internal_fn.updateAngle=function(d){var $$=this,config=$$.config,found=false,index=0,gMin,gMax,gTic,gValue;if(!config){return null;}$$.pie($$.filterTargetsToShow($$.data.targets)).forEach(function(t){if(!found&&t.data.id===d.data.id){found=true;d=t;d.index=index;}index++;});if(isNaN(d.startAngle)){d.startAngle=0;}if(isNaN(d.endAngle)){d.endAngle=d.startAngle;}if($$.isGaugeType(d.data)){gMin=config.gauge_min;gMax=config.gauge_max;gTic=Math.PI*(config.gauge_fullCircle?2:1)/(gMax-gMin);gValue=d.value0.375?1.175-36/$$.radius:0.8)*$$.radius/h:0;}translate="translate("+x*ratio+','+y*ratio+")";}return translate;};c3_chart_internal_fn.getArcRatio=function(d){var $$=this,config=$$.config,whole=Math.PI*($$.hasType('gauge')&&!config.gauge_fullCircle?1:2);return d?(d.endAngle-d.startAngle)/whole:null;};c3_chart_internal_fn.convertToArcData=function(d){return this.addName({id:d.data.id,value:d.value,ratio:this.getArcRatio(d),index:d.index});};c3_chart_internal_fn.textForArcLabel=function(d){var $$=this,updated,value,ratio,id,format;if(!$$.shouldShowArcLabel()){return"";}updated=$$.updateAngle(d);value=updated?updated.value:null;ratio=$$.getArcRatio(updated);id=d.data.id;if(!$$.hasType('gauge')&&!$$.meetsArcLabelThreshold(ratio)){return"";}format=$$.getArcLabelFormat();return format?format(value,ratio,id):$$.defaultArcValueFormat(value,ratio);};c3_chart_internal_fn.expandArc=function(targetIds){var $$=this,interval;// MEMO: avoid to cancel transition +if($$.transiting){interval=window.setInterval(function(){if(!$$.transiting){window.clearInterval(interval);if($$.legend.selectAll('.c3-legend-item-focused').size()>0){$$.expandArc(targetIds);}}},10);return;}targetIds=$$.mapToTargetIds(targetIds);$$.svg.selectAll($$.selectorTargets(targetIds,'.'+CLASS.chartArc)).each(function(d){if(!$$.shouldExpand(d.data.id)){return;}$$.d3.select(this).selectAll('path').transition().duration($$.expandDuration(d.data.id)).attr("d",$$.svgArcExpanded).transition().duration($$.expandDuration(d.data.id)*2).attr("d",$$.svgArcExpandedSub).each(function(d){if($$.isDonutType(d.data)){// callback here +}});});};c3_chart_internal_fn.unexpandArc=function(targetIds){var $$=this;if($$.transiting){return;}targetIds=$$.mapToTargetIds(targetIds);$$.svg.selectAll($$.selectorTargets(targetIds,'.'+CLASS.chartArc)).selectAll('path').transition().duration(function(d){return $$.expandDuration(d.data.id);}).attr("d",$$.svgArc);$$.svg.selectAll('.'+CLASS.arc).style("opacity",1);};c3_chart_internal_fn.expandDuration=function(id){var $$=this,config=$$.config;if($$.isDonutType(id)){return config.donut_expand_duration;}else if($$.isGaugeType(id)){return config.gauge_expand_duration;}else if($$.isPieType(id)){return config.pie_expand_duration;}else{return 50;}};c3_chart_internal_fn.shouldExpand=function(id){var $$=this,config=$$.config;return $$.isDonutType(id)&&config.donut_expand||$$.isGaugeType(id)&&config.gauge_expand||$$.isPieType(id)&&config.pie_expand;};c3_chart_internal_fn.shouldShowArcLabel=function(){var $$=this,config=$$.config,shouldShow=true;if($$.hasType('donut')){shouldShow=config.donut_label_show;}else if($$.hasType('pie')){shouldShow=config.pie_label_show;}// when gauge, always true +return shouldShow;};c3_chart_internal_fn.meetsArcLabelThreshold=function(ratio){var $$=this,config=$$.config,threshold=$$.hasType('donut')?config.donut_label_threshold:config.pie_label_threshold;return ratio>=threshold;};c3_chart_internal_fn.getArcLabelFormat=function(){var $$=this,config=$$.config,format=config.pie_label_format;if($$.hasType('gauge')){format=config.gauge_label_format;}else if($$.hasType('donut')){format=config.donut_label_format;}return format;};c3_chart_internal_fn.getArcTitle=function(){var $$=this;return $$.hasType('donut')?$$.config.donut_title:"";};c3_chart_internal_fn.updateTargetsForArc=function(targets){var $$=this,main=$$.main,mainPieUpdate,mainPieEnter,classChartArc=$$.classChartArc.bind($$),classArcs=$$.classArcs.bind($$),classFocus=$$.classFocus.bind($$);mainPieUpdate=main.select('.'+CLASS.chartArcs).selectAll('.'+CLASS.chartArc).data($$.pie(targets)).attr("class",function(d){return classChartArc(d)+classFocus(d.data);});mainPieEnter=mainPieUpdate.enter().append("g").attr("class",classChartArc);mainPieEnter.append('g').attr('class',classArcs);mainPieEnter.append("text").attr("dy",$$.hasType('gauge')?"-.1em":".35em").style("opacity",0).style("text-anchor","middle").style("pointer-events","none");// MEMO: can not keep same color..., but not bad to update color in redraw +//mainPieUpdate.exit().remove(); +};c3_chart_internal_fn.initArc=function(){var $$=this;$$.arcs=$$.main.select('.'+CLASS.chart).append("g").attr("class",CLASS.chartArcs).attr("transform",$$.getTranslate('arc'));$$.arcs.append('text').attr('class',CLASS.chartArcsTitle).style("text-anchor","middle").text($$.getArcTitle());};c3_chart_internal_fn.redrawArc=function(duration,durationForExit,withTransform){var $$=this,d3$$1=$$.d3,config=$$.config,main=$$.main,mainArc;mainArc=main.selectAll('.'+CLASS.arcs).selectAll('.'+CLASS.arc).data($$.arcData.bind($$));mainArc.enter().append('path').attr("class",$$.classArc.bind($$)).style("fill",function(d){return $$.color(d.data);}).style("cursor",function(d){return config.interaction_enabled&&config.data_selection_isselectable(d)?"pointer":null;}).style("opacity",0).each(function(d){if($$.isGaugeType(d.data)){d.startAngle=d.endAngle=config.gauge_startingAngle;}this._current=d;});mainArc.attr("transform",function(d){return!$$.isGaugeType(d.data)&&withTransform?"scale(0)":"";}).style("opacity",function(d){return d===this._current?0:1;}).on('mouseover',config.interaction_enabled?function(d){var updated,arcData;if($$.transiting){// skip while transiting +return;}updated=$$.updateAngle(d);if(updated){arcData=$$.convertToArcData(updated);// transitions +$$.expandArc(updated.data.id);$$.api.focus(updated.data.id);$$.toggleFocusLegend(updated.data.id,true);$$.config.data_onmouseover(arcData,this);}}:null).on('mousemove',config.interaction_enabled?function(d){var updated=$$.updateAngle(d),arcData,selectedData;if(updated){arcData=$$.convertToArcData(updated),selectedData=[arcData];$$.showTooltip(selectedData,this);}}:null).on('mouseout',config.interaction_enabled?function(d){var updated,arcData;if($$.transiting){// skip while transiting +return;}updated=$$.updateAngle(d);if(updated){arcData=$$.convertToArcData(updated);// transitions +$$.unexpandArc(updated.data.id);$$.api.revert();$$.revertLegend();$$.hideTooltip();$$.config.data_onmouseout(arcData,this);}}:null).on('click',config.interaction_enabled?function(d,i){var updated=$$.updateAngle(d),arcData;if(updated){arcData=$$.convertToArcData(updated);if($$.toggleShape){$$.toggleShape(this,arcData,i);}$$.config.data_onclick.call($$.api,arcData,this);}}:null).each(function(){$$.transiting=true;}).transition().duration(duration).attrTween("d",function(d){var updated=$$.updateAngle(d),interpolate;if(!updated){return function(){return"M 0 0";};}// if (this._current === d) { +// this._current = { +// startAngle: Math.PI*2, +// endAngle: Math.PI*2, +// }; +// } +if(isNaN(this._current.startAngle)){this._current.startAngle=0;}if(isNaN(this._current.endAngle)){this._current.endAngle=this._current.startAngle;}interpolate=d3$$1.interpolate(this._current,updated);this._current=interpolate(0);return function(t){var interpolated=interpolate(t);interpolated.data=d.data;// data.id will be updated by interporator +return $$.getArc(interpolated,true);};}).attr("transform",withTransform?"scale(1)":"").style("fill",function(d){return $$.levelColor?$$.levelColor(d.data.values[0].value):$$.color(d.data.id);})// Where gauge reading color would receive customization. +.style("opacity",1).call($$.endall,function(){$$.transiting=false;});mainArc.exit().transition().duration(durationForExit).style('opacity',0).remove();main.selectAll('.'+CLASS.chartArc).select('text').style("opacity",0).attr('class',function(d){return $$.isGaugeType(d.data)?CLASS.gaugeValue:'';}).text($$.textForArcLabel.bind($$)).attr("transform",$$.transformForArcLabel.bind($$)).style('font-size',function(d){return $$.isGaugeType(d.data)?Math.round($$.radius/5)+'px':'';}).transition().duration(duration).style("opacity",function(d){return $$.isTargetToShow(d.data.id)&&$$.isArcType(d.data)?1:0;});main.select('.'+CLASS.chartArcsTitle).style("opacity",$$.hasType('donut')||$$.hasType('gauge')?1:0);if($$.hasType('gauge')){$$.arcs.select('.'+CLASS.chartArcsBackground).attr("d",function(){var d={data:[{value:config.gauge_max}],startAngle:config.gauge_startingAngle,endAngle:-1*config.gauge_startingAngle};return $$.getArc(d,true,true);});$$.arcs.select('.'+CLASS.chartArcsGaugeUnit).attr("dy",".75em").text(config.gauge_label_show?config.gauge_units:'');$$.arcs.select('.'+CLASS.chartArcsGaugeMin).attr("dx",-1*($$.innerRadius+($$.radius-$$.innerRadius)/(config.gauge_fullCircle?1:2))+"px").attr("dy","1.2em").text(config.gauge_label_show?config.gauge_min:'');$$.arcs.select('.'+CLASS.chartArcsGaugeMax).attr("dx",$$.innerRadius+($$.radius-$$.innerRadius)/(config.gauge_fullCircle?1:2)+"px").attr("dy","1.2em").text(config.gauge_label_show?config.gauge_max:'');}};c3_chart_internal_fn.initGauge=function(){var arcs=this.arcs;if(this.hasType('gauge')){arcs.append('path').attr("class",CLASS.chartArcsBackground);arcs.append("text").attr("class",CLASS.chartArcsGaugeUnit).style("text-anchor","middle").style("pointer-events","none");arcs.append("text").attr("class",CLASS.chartArcsGaugeMin).style("text-anchor","middle").style("pointer-events","none");arcs.append("text").attr("class",CLASS.chartArcsGaugeMax).style("text-anchor","middle").style("pointer-events","none");}};c3_chart_internal_fn.getGaugeLabelHeight=function(){return this.config.gauge_label_show?20:0;};c3_chart_internal_fn.initRegion=function(){var $$=this;$$.region=$$.main.append('g').attr("clip-path",$$.clipPath).attr("class",CLASS.regions);};c3_chart_internal_fn.updateRegion=function(duration){var $$=this,config=$$.config;// hide if arc type +$$.region.style('visibility',$$.hasArcType()?'hidden':'visible');$$.mainRegion=$$.main.select('.'+CLASS.regions).selectAll('.'+CLASS.region).data(config.regions);$$.mainRegion.enter().append('g').append('rect').style("fill-opacity",0);$$.mainRegion.attr('class',$$.classRegion.bind($$));$$.mainRegion.exit().transition().duration(duration).style("opacity",0).remove();};c3_chart_internal_fn.redrawRegion=function(withTransition){var $$=this,regions=$$.mainRegion.selectAll('rect').each(function(){// data is binded to g and it's not transferred to rect (child node) automatically, +// then data of each rect has to be updated manually. +// TODO: there should be more efficient way to solve this? +var parentData=$$.d3.select(this.parentNode).datum();$$.d3.select(this).datum(parentData);}),x=$$.regionX.bind($$),y=$$.regionY.bind($$),w=$$.regionWidth.bind($$),h=$$.regionHeight.bind($$);return[(withTransition?regions.transition():regions).attr("x",x).attr("y",y).attr("width",w).attr("height",h).style("fill-opacity",function(d){return isValue(d.opacity)?d.opacity:0.1;})];};c3_chart_internal_fn.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;};c3_chart_internal_fn.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;};c3_chart_internal_fn.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