diff --git a/dc.js b/dc.js index 2fd6e707b..cd10a97d6 100644 --- a/dc.js +++ b/dc.js @@ -1,9801 +1,9801 @@ -/*! - * dc 2.1.0-dev - * http://dc-js.github.io/dc.js/ - * Copyright 2012-2015 Nick Zhu & the dc.js Developers - * https://github.com/dc-js/dc.js/blob/master/AUTHORS - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -(function() { function _dc(d3, crossfilter) { -'use strict'; - -/** - * The entire dc.js library is scoped under the **dc** name space. It does not introduce - * anything else into the global name space. - * - * Most `dc` functions are designed to allow function chaining, meaning they return the current chart - * instance whenever it is appropriate. The getter forms of functions do not participate in function - * chaining because they necessarily return values that are not the chart. Although some, - * such as `.svg` and `.xAxis`, return values that are chainable d3 objects. - * @namespace dc - * @version 2.1.0-dev - * @example - * // Example chaining - * chart.width(300) - * .height(300) - * .filter('sunday'); - */ -/*jshint -W079*/ -var dc = { - version: '2.1.0-dev', - constants: { - CHART_CLASS: 'dc-chart', - DEBUG_GROUP_CLASS: 'debug', - STACK_CLASS: 'stack', - DESELECTED_CLASS: 'deselected', - SELECTED_CLASS: 'selected', - NODE_INDEX_NAME: '__index__', - GROUP_INDEX_NAME: '__group_index__', - DEFAULT_CHART_GROUP: '__default_chart_group__', - EVENT_DELAY: 40, - NEGLIGIBLE_NUMBER: 1e-10 - }, - _renderlet: null -}; -/*jshint +W079*/ - -dc.chartRegistry = (function () { - // chartGroup:string => charts:array - var _chartMap = {}; - - function initializeChartGroup (group) { - if (!group) { - group = dc.constants.DEFAULT_CHART_GROUP; - } - - if (!_chartMap[group]) { - _chartMap[group] = []; - } - - return group; - } - - return { - has: function (chart) { - for (var e in _chartMap) { - if (_chartMap[e].indexOf(chart) >= 0) { - return true; - } - } - return false; - }, - - register: function (chart, group) { - group = initializeChartGroup(group); - _chartMap[group].push(chart); - }, - - deregister: function (chart, group) { - group = initializeChartGroup(group); - for (var i = 0; i < _chartMap[group].length; i++) { - if (_chartMap[group][i].anchorName() === chart.anchorName()) { - _chartMap[group].splice(i, 1); - break; - } - } - }, - - clear: function (group) { - if (group) { - delete _chartMap[group]; - } else { - _chartMap = {}; - } - }, - - list: function (group) { - group = initializeChartGroup(group); - return _chartMap[group]; - } - }; -})(); - -dc.registerChart = function (chart, group) { - dc.chartRegistry.register(chart, group); -}; - -dc.deregisterChart = function (chart, group) { - dc.chartRegistry.deregister(chart, group); -}; - -dc.hasChart = function (chart) { - return dc.chartRegistry.has(chart); -}; - -dc.deregisterAllCharts = function (group) { - dc.chartRegistry.clear(group); -}; - -/** - * Clear all filters on all charts within the given chart group. If the chart group is not given then - * only charts that belong to the default chart group will be reset. - * @memberof dc - * @name filterAll - * @param {String} [group] - */ -dc.filterAll = function (group) { - var charts = dc.chartRegistry.list(group); - for (var i = 0; i < charts.length; ++i) { - charts[i].filterAll(); - } -}; - -/** - * Reset zoom level / focus on all charts that belong to the given chart group. If the chart group is - * not given then only charts that belong to the default chart group will be reset. - * @memberof dc - * @name refocusAll - * @param {String} [group] - */ -dc.refocusAll = function (group) { - var charts = dc.chartRegistry.list(group); - for (var i = 0; i < charts.length; ++i) { - if (charts[i].focus) { - charts[i].focus(); - } - } -}; - -/** - * Re-render all charts belong to the given chart group. If the chart group is not given then only - * charts that belong to the default chart group will be re-rendered. - * @memberof dc - * @name renderAll - * @param {String} [group] - */ -dc.renderAll = function (group) { - var charts = dc.chartRegistry.list(group); - for (var i = 0; i < charts.length; ++i) { - charts[i].render(); - } - - if (dc._renderlet !== null) { - dc._renderlet(group); - } -}; - -/** - * Redraw all charts belong to the given chart group. If the chart group is not given then only charts - * that belong to the default chart group will be re-drawn. Redraw is different from re-render since - * when redrawing dc tries to update the graphic incrementally, using transitions, instead of starting - * from scratch. - * @memberof dc - * @name redrawAll - * @param {String} [group] - */ -dc.redrawAll = function (group) { - var charts = dc.chartRegistry.list(group); - for (var i = 0; i < charts.length; ++i) { - charts[i].redraw(); - } - - if (dc._renderlet !== null) { - dc._renderlet(group); - } -}; - -/** - * If this boolean is set truthy, all transitions will be disabled, and changes to the charts will happen - * immediately - * @memberof dc - * @name disableTransitions - * @type {Boolean} - * @default false - */ -dc.disableTransitions = false; - -dc.transition = function (selections, duration, callback, name) { - if (duration <= 0 || duration === undefined || dc.disableTransitions) { - return selections; - } - - var s = selections - .transition(name) - .duration(duration); - - if (typeof(callback) === 'function') { - callback(s); - } - - return s; -}; - -/* somewhat silly, but to avoid duplicating logic */ -dc.optionalTransition = function (enable, duration, callback, name) { - if (enable) { - return function (selection) { - return dc.transition(selection, duration, callback, name); - }; - } else { - return function (selection) { - return selection; - }; - } -}; - -/** - * @name units - * @memberof dc - * @type {{}} - */ -dc.units = {}; - -/** - * The default value for `xUnits` for the [Coordinate Grid Chart](#coordinate-grid-chart) and should - * be used when the x values are a sequence of integers. - * It is a function that counts the number of integers in the range supplied in its start and end parameters. - * @name integers - * @memberof dc.units - * @example - * chart.xUnits(dc.units.integers) // already the default - * @param {Number} start - * @param {Number} end - * @returns {Number} - */ -dc.units.integers = function (start, end) { - return Math.abs(end - start); -}; - -/** - * This argument can be passed to the `xUnits` function of the to specify ordinal units for the x - * axis. Usually this parameter is used in combination with passing `d3.scale.ordinal()` to `.x`. - * It just returns the domain passed to it, which for ordinal charts is an array of all values. - * @name ordinal - * @memberof dc.units - * @example - * chart.xUnits(dc.units.ordinal) - * .x(d3.scale.ordinal()) - * @param {*} start - * @param {*} end - * @param {Array} domain - * @returns {Array} - */ -dc.units.ordinal = function (start, end, domain) { - return domain; -}; - -/** - * @name fp - * @memberof dc.units - * @type {{}} - */ -dc.units.fp = {}; -/** - * This function generates an argument for the [Coordinate Grid Chart's](#coordinate-grid-chart) - * `xUnits` function specifying that the x values are floating-point numbers with the given - * precision. - * The returned function determines how many values at the given precision will fit into the range - * supplied in its start and end parameters. - * @name precision - * @memberof dc.units.fp - * @example - * // specify values (and ticks) every 0.1 units - * chart.xUnits(dc.units.fp.precision(0.1) - * // there are 500 units between 0.5 and 1 if the precision is 0.001 - * var thousandths = dc.units.fp.precision(0.001); - * thousandths(0.5, 1.0) // returns 500 - * @param {Number} precision - * @returns {Function} start-end unit function - */ -dc.units.fp.precision = function (precision) { - var _f = function (s, e) { - var d = Math.abs((e - s) / _f.resolution); - if (dc.utils.isNegligible(d - Math.floor(d))) { - return Math.floor(d); - } else { - return Math.ceil(d); - } - }; - _f.resolution = precision; - return _f; -}; - -dc.round = {}; -dc.round.floor = function (n) { - return Math.floor(n); -}; -dc.round.ceil = function (n) { - return Math.ceil(n); -}; -dc.round.round = function (n) { - return Math.round(n); -}; - -dc.override = function (obj, functionName, newFunction) { - var existingFunction = obj[functionName]; - obj['_' + functionName] = existingFunction; - obj[functionName] = newFunction; -}; - -dc.renderlet = function (_) { - if (!arguments.length) { - return dc._renderlet; - } - dc._renderlet = _; - return dc; -}; - -dc.instanceOfChart = function (o) { - return o instanceof Object && o.__dcFlag__ && true; -}; - -dc.errors = {}; - -dc.errors.Exception = function (msg) { - var _msg = msg || 'Unexpected internal error'; - - this.message = _msg; - - this.toString = function () { - return _msg; - }; - this.stack = (new Error()).stack; -}; -dc.errors.Exception.prototype = Object.create(Error.prototype); -dc.errors.Exception.prototype.constructor = dc.errors.Exception; - -dc.errors.InvalidStateException = function () { - dc.errors.Exception.apply(this, arguments); -}; - -dc.errors.InvalidStateException.prototype = Object.create(dc.errors.Exception.prototype); -dc.errors.InvalidStateException.prototype.constructor = dc.errors.InvalidStateException; - -dc.errors.BadArgumentException = function () { - dc.errors.Exception.apply(this, arguments); -}; - -dc.errors.BadArgumentException.prototype = Object.create(dc.errors.Exception.prototype); -dc.errors.BadArgumentException.prototype.constructor = dc.errors.BadArgumentException; - -dc.dateFormat = d3.time.format('%m/%d/%Y'); - -dc.printers = {}; - -dc.printers.filters = function (filters) { - var s = ''; - - for (var i = 0; i < filters.length; ++i) { - if (i > 0) { - s += ', '; - } - s += dc.printers.filter(filters[i]); - } - - return s; -}; - -dc.printers.filter = function (filter) { - var s = ''; - - if (typeof filter !== 'undefined' && filter !== null) { - if (filter instanceof Array) { - if (filter.length >= 2) { - s = '[' + dc.utils.printSingleValue(filter[0]) + ' -> ' + dc.utils.printSingleValue(filter[1]) + ']'; - } else if (filter.length >= 1) { - s = dc.utils.printSingleValue(filter[0]); - } - } else { - s = dc.utils.printSingleValue(filter); - } - } - - return s; -}; - -dc.pluck = function (n, f) { - if (!f) { - return function (d) { return d[n]; }; - } - return function (d, i) { return f.call(d, d[n], i); }; -}; - -dc.utils = {}; - -dc.utils.printSingleValue = function (filter) { - var s = '' + filter; - - if (filter instanceof Date) { - s = dc.dateFormat(filter); - } else if (typeof(filter) === 'string') { - s = filter; - } else if (dc.utils.isFloat(filter)) { - s = dc.utils.printSingleValue.fformat(filter); - } else if (dc.utils.isInteger(filter)) { - s = Math.round(filter); - } - - return s; -}; -dc.utils.printSingleValue.fformat = d3.format('.2f'); - -// FIXME: these assume than any string r is a percentage (whether or not it -// includes %). They also generate strange results if l is a string. -dc.utils.add = function (l, r) { - if (typeof r === 'string') { - r = r.replace('%', ''); - } - - if (l instanceof Date) { - if (typeof r === 'string') { - r = +r; - } - var d = new Date(); - d.setTime(l.getTime()); - d.setDate(l.getDate() + r); - return d; - } else if (typeof r === 'string') { - var percentage = (+r / 100); - return l > 0 ? l * (1 + percentage) : l * (1 - percentage); - } else { - return l + r; - } -}; - -dc.utils.subtract = function (l, r) { - if (typeof r === 'string') { - r = r.replace('%', ''); - } - - if (l instanceof Date) { - if (typeof r === 'string') { - r = +r; - } - var d = new Date(); - d.setTime(l.getTime()); - d.setDate(l.getDate() - r); - return d; - } else if (typeof r === 'string') { - var percentage = (+r / 100); - return l < 0 ? l * (1 + percentage) : l * (1 - percentage); - } else { - return l - r; - } -}; - -dc.utils.isNumber = function (n) { - return n === +n; -}; - -dc.utils.isFloat = function (n) { - return n === +n && n !== (n | 0); -}; - -dc.utils.isInteger = function (n) { - return n === +n && n === (n | 0); -}; - -dc.utils.isNegligible = function (n) { - return !dc.utils.isNumber(n) || (n < dc.constants.NEGLIGIBLE_NUMBER && n > -dc.constants.NEGLIGIBLE_NUMBER); -}; - -dc.utils.clamp = function (val, min, max) { - return val < min ? min : (val > max ? max : val); -}; - -var _idCounter = 0; -dc.utils.uniqueId = function () { - return ++_idCounter; -}; - -dc.utils.nameToId = function (name) { - return name.toLowerCase().replace(/[\s]/g, '_').replace(/[\.']/g, ''); -}; - -dc.utils.appendOrSelect = function (parent, selector, tag) { - tag = tag || selector; - var element = parent.select(selector); - if (element.empty()) { - element = parent.append(tag); - } - return element; -}; - -dc.utils.safeNumber = function (n) { return dc.utils.isNumber(+n) ? +n : 0;}; - -dc.logger = {}; - -dc.logger.enableDebugLog = false; - -dc.logger.warn = function (msg) { - if (console) { - if (console.warn) { - console.warn(msg); - } else if (console.log) { - console.log(msg); - } - } - - return dc.logger; -}; - -dc.logger.debug = function (msg) { - if (dc.logger.enableDebugLog && console) { - if (console.debug) { - console.debug(msg); - } else if (console.log) { - console.log(msg); - } - } - - return dc.logger; -}; - -dc.logger.deprecate = function (fn, msg) { - // Allow logging of deprecation - var warned = false; - function deprecated () { - if (!warned) { - dc.logger.warn(msg); - warned = true; - } - return fn.apply(this, arguments); - } - return deprecated; -}; - -dc.events = { - current: null -}; - -/** - * This function triggers a throttled event function with a specified delay (in milli-seconds). Events - * that are triggered repetitively due to user interaction such brush dragging might flood the library - * and invoke more renders than can be executed in time. Using this function to wrap your event - * function allows the library to smooth out the rendering by throttling events and only responding to - * the most recent event. - * @name events.trigger - * @memberof dc - * @example - * chart.on('renderlet', function(chart) { - * // smooth the rendering through event throttling - * dc.events.trigger(function(){ - * // focus some other chart to the range selected by user on this chart - * someOtherChart.focus(chart.filter()); - * }); - * }) - * @param {Function} closure - * @param {Number} [delay] - */ -dc.events.trigger = function (closure, delay) { - if (!delay) { - closure(); - return; - } - - dc.events.current = closure; - - setTimeout(function () { - if (closure === dc.events.current) { - closure(); - } - }, delay); -}; - -/** - * The dc.js filters are functions which are passed into crossfilter to chose which records will be - * accumulated to produce values for the charts. In the crossfilter model, any filters applied on one - * dimension will affect all the other dimensions but not that one. dc always applies a filter - * function to the dimension; the function combines multiple filters and if any of them accept a - * record, it is filtered in. - * - * These filter constructors are used as appropriate by the various charts to implement brushing. We - * mention below which chart uses which filter. In some cases, many instances of a filter will be added. - * - * Each of the dc.js filters is an object with the following properties: - * * `isFiltered` - a function that returns true if a value is within the filter - * * `filterType` - a string identifying the filter, here the name of the constructor - * - * Currently these filter objects are also arrays, but this is not a requirement. Custom filters - * can be used as long as they have the properties above. - * @name filters - * @memberof dc - * @type {{}} - */ -dc.filters = {}; - -/** - * RangedFilter is a filter which accepts keys between `low` and `high`. It is used to implement X - * axis brushing for the [coordinate grid charts](#coordinate-grid-mixin). - * - * Its `filterType` is 'RangedFilter' - * @name RangedFilter - * @memberof dc.filters - * @param {Number} low - * @param {Number} high - * @returns {Array} - * @constructor - */ -dc.filters.RangedFilter = function (low, high) { - var range = new Array(low, high); - range.isFiltered = function (value) { - return value >= this[0] && value < this[1]; - }; - range.filterType = 'RangedFilter'; - - return range; -}; - -/** - * TwoDimensionalFilter is a filter which accepts a single two-dimensional value. It is used by the - * [heat map chart](#heat-map) to include particular cells as they are clicked. (Rows and columns are - * filtered by filtering all the cells in the row or column.) - * - * Its `filterType` is 'TwoDimensionalFilter' - * @name TwoDimensionalFilter - * @memberof dc.filters - * @param {Array} filter - * @returns {Array} - * @constructor - */ -dc.filters.TwoDimensionalFilter = function (filter) { - if (filter === null) { return null; } - - var f = filter; - f.isFiltered = function (value) { - return value.length && value.length === f.length && - value[0] === f[0] && value[1] === f[1]; - }; - f.filterType = 'TwoDimensionalFilter'; - - return f; -}; - -/** - * The RangedTwoDimensionalFilter allows filtering all values which fit within a rectangular - * region. It is used by the [scatter plot](#scatter-plot) to implement rectangular brushing. - * - * It takes two two-dimensional points in the form `[[x1,y1],[x2,y2]]`, and normalizes them so that - * `x1 <= x2` and `y1 <- y2`. It then returns a filter which accepts any points which are in the - * rectangular range including the lower values but excluding the higher values. - * - * If an array of two values are given to the RangedTwoDimensionalFilter, it interprets the values as - * two x coordinates `x1` and `x2` and returns a filter which accepts any points for which `x1 <= x < - * x2`. - * - * Its `filterType` is 'RangedTwoDimensionalFilter' - * @name RangedTwoDimensionalFilter - * @memberof dc.filters - * @param {Array>} filter - * @returns {Array>} - * @constructor - */ -dc.filters.RangedTwoDimensionalFilter = function (filter) { - if (filter === null) { return null; } - - var f = filter; - var fromBottomLeft; - - if (f[0] instanceof Array) { - fromBottomLeft = [ - [Math.min(filter[0][0], filter[1][0]), Math.min(filter[0][1], filter[1][1])], - [Math.max(filter[0][0], filter[1][0]), Math.max(filter[0][1], filter[1][1])] - ]; - } else { - fromBottomLeft = [[filter[0], -Infinity], [filter[1], Infinity]]; - } - - f.isFiltered = function (value) { - var x, y; - - if (value instanceof Array) { - if (value.length !== 2) { - return false; - } - x = value[0]; - y = value[1]; - } else { - x = value; - y = fromBottomLeft[0][1]; - } - - return x >= fromBottomLeft[0][0] && x < fromBottomLeft[1][0] && - y >= fromBottomLeft[0][1] && y < fromBottomLeft[1][1]; - }; - f.filterType = 'RangedTwoDimensionalFilter'; - - return f; -}; - -/** - * `dc.baseMixin` is an abstract functional object representing a basic `dc` chart object - * for all chart and widget implementations. Methods from the `dc.baseMixin` are inherited - * and available on all chart implementations in the `dc` library. - * @name baseMixin - * @memberof dc - * @mixin - * @param {Object} _chart - * @return {dc.baseMixin} - */ -dc.baseMixin = function (_chart) { - _chart.__dcFlag__ = dc.utils.uniqueId(); - - var _dimension; - var _group; - - var _anchor; - var _root; - var _svg; - var _isChild; - - var _minWidth = 200; - var _defaultWidth = function (element) { - var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width; - return (width && width > _minWidth) ? width : _minWidth; - }; - var _width = _defaultWidth; - - var _minHeight = 200; - var _defaultHeight = function (element) { - var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height; - return (height && height > _minHeight) ? height : _minHeight; - }; - var _height = _defaultHeight; - - var _keyAccessor = dc.pluck('key'); - var _valueAccessor = dc.pluck('value'); - var _label = dc.pluck('key'); - - var _ordering = dc.pluck('key'); - var _orderSort; - - var _renderLabel = false; - - var _title = function (d) { - return _chart.keyAccessor()(d) + ': ' + _chart.valueAccessor()(d); - }; - var _renderTitle = true; - var _controlsUseVisibility = true; - - var _transitionDuration = 750; - - var _filterPrinter = dc.printers.filters; - - var _mandatoryAttributes = ['dimension', 'group']; - - var _chartGroup = dc.constants.DEFAULT_CHART_GROUP; - - var _listeners = d3.dispatch( - 'preRender', - 'postRender', - 'preRedraw', - 'postRedraw', - 'filtered', - 'zoomed', - 'renderlet', - 'pretransition'); - - var _legend; - - var _filters = []; - var _filterHandler = function (dimension, filters) { - if (filters.length === 0) { - dimension.filter(null); - } else if (filters.length === 1 && !filters[0].isFiltered) { - // single value and not a function-based filter - dimension.filterExact(filters[0]); - } else if (filters.length === 1 && filters[0].filterType === 'RangedFilter') { - // single range-based filter - dimension.filterRange(filters[0]); - } else { - dimension.filterFunction(function (d) { - for (var i = 0; i < filters.length; i++) { - var filter = filters[i]; - if (filter.isFiltered && filter.isFiltered(d)) { - return true; - } else if (filter <= d && filter >= d) { - return true; - } - } - return false; - }); - } - return filters; - }; - - var _data = function (group) { - return group.all(); - }; - - /** - * Set or get the height attribute of a chart. The height is applied to the SVGElement generated by - * the chart when rendered (or re-rendered). If a value is given, then it will be used to calculate - * the new height and the chart returned for method chaining. The value can either be a numeric, a - * function, or falsy. If no value is specified then the value of the current height attribute will - * be returned. - * - * By default, without an explicit height being given, the chart will select the width of its - * anchor element. If that isn't possible it defaults to 200 (provided by the - * {@link #dc.baseMixin.minHeight minHeight} property). Setting the value falsy will return - * the chart to the default behavior. - * @name height - * @memberof dc.baseMixin - * @instance - * @see {@link #dc.baseMixin+minHeight minHeight} - * @example - * // Default height - * chart.height(function (element) { - * var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height; - * return (height && height > chart.minHeight()) ? height : chart.minHeight(); - * }); - * - * chart.height(250); // Set the chart's height to 250px; - * chart.height(function(anchor) { return doSomethingWith(anchor); }); // set the chart's height with a function - * chart.height(null); // reset the height to the default auto calculation - * @param {Number|Function} [height] - * @return {Number} - * @return {dc.baseMixin} - */ - _chart.height = function (height) { - if (!arguments.length) { - return _height(_root.node()); - } - _height = d3.functor(height || _defaultHeight); - return _chart; - }; - - /** - * Set or get the width attribute of a chart. - * @name width - * @memberof dc.baseMixin - * @instance - * @see {@link #dc.baseMixin+height height} - * @see {@link #dc.baseMixin+minWidth minWidth} - * @example - * // Default width - * chart.width(function (element) { - * var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width; - * return (width && width > chart.minWidth()) ? width : chart.minWidth(); - * }); - * @param {Number|Function} [width] - * @return {Number} - * @return {dc.baseMixin} - */ - _chart.width = function (width) { - if (!arguments.length) { - return _width(_root.node()); - } - _width = d3.functor(width || _defaultWidth); - return _chart; - }; - - /** - * Set or get the minimum width attribute of a chart. This only has effect when used with the default `width` function. - * @name minWidth - * @memberof dc.baseMixin - * @instance - * @see {@link #dc.baseMixin+width width} - * @param {Number} [minWidth=200] - * @return {Number} - * @return {dc.baseMixin} - */ - _chart.minWidth = function (minWidth) { - if (!arguments.length) { - return _minWidth; - } - _minWidth = minWidth; - return _chart; - }; - - /** - * Set or get the minimum height attribute of a chart. This only has effect when used with the default `height` function. - * @name minHeight - * @memberof dc.baseMixin - * @instance - * @see {@link #dc.baseMixin+height height} - * @param {Number} [minHeight=200] - * @return {Number} - * @return {dc.baseMixin} - */ - _chart.minHeight = function (minHeight) { - if (!arguments.length) { - return _minHeight; - } - _minHeight = minHeight; - return _chart; - }; - - /** - * **mandatory** - * - * Set or get the dimension attribute of a chart. In `dc`, a dimension can be any valid [crossfilter - * dimension](https://github.com/square/crossfilter/wiki/API-Reference#wiki-dimension). - * - * If a value is given, then it will be used as the new dimension. If no value is specified then - * the current dimension will be returned. - * @name dimension - * @memberof dc.baseMixin - * @instance - * @see {@link https://github.com/square/crossfilter/wiki/API-Reference#dimension crossfilter.dimension} - * @example - * var index = crossfilter([]); - * var dimension = index.dimension(dc.pluck('key')); - * chart.dimension(dimension); - * @param {crossfilter.dimension} [dimension] - * @return {crossfilter.dimension} - * @return {dc.baseMixin} - */ - _chart.dimension = function (dimension) { - if (!arguments.length) { - return _dimension; - } - _dimension = dimension; - _chart.expireCache(); - return _chart; - }; - - /** - * Set the data callback or retrieve the chart's data set. The data callback is passed the chart's - * group and by default will return `group.all()`. This behavior may be modified to, for instance, - * return only the top 5 groups. - * @name data - * @memberof dc.baseMixin - * @instance - * @example - * // Default data function - * chart.data(function (group) { return group.all(); }); - * - * chart.data(function (group) { return group.top(5); }); - * @param {Function} [callback] - * @return {*} - * @return {dc.baseMixin} - */ - _chart.data = function (callback) { - if (!arguments.length) { - return _data.call(_chart, _group); - } - _data = d3.functor(callback); - _chart.expireCache(); - return _chart; - }; - - /** - * **mandatory** - * - * Set or get the group attribute of a chart. In `dc` a group is a [crossfilter - * group](https://github.com/square/crossfilter/wiki/API-Reference#group-map-reduce). Usually the group - * should be created from the particular dimension associated with the same chart. If a value is - * given, then it will be used as the new group. - * - * If no value specified then the current group will be returned. - * If `name` is specified then it will be used to generate legend label. - * @name group - * @memberof dc.baseMixin - * @instance - * @see {@link https://github.com/square/crossfilter/wiki/API-Reference#group-map-reduce crossfilter.group} - * @example - * var index = crossfilter([]); - * var dimension = index.dimension(dc.pluck('key')); - * chart.dimension(dimension); - * chart.group(dimension.group(crossfilter.reduceSum())); - * @param {crossfilter.group} [group] - * @param {String} [name] - * @return {crossfilter.group} - * @return {dc.baseMixin} - */ - _chart.group = function (group, name) { - if (!arguments.length) { - return _group; - } - _group = group; - _chart._groupName = name; - _chart.expireCache(); - return _chart; - }; - - /** - * Get or set an accessor to order ordinal dimensions. This uses `crossfilter.quicksort.by` as the - * sort. - * @name ordering - * @memberof dc.baseMixin - * @instance - * @see {@link https://github.com/square/crossfilter/wiki/API-Reference#quicksort_by crossfilter.quicksort.by} - * @example - * // Default ordering accessor - * _chart.ordering(dc.pluck('key')); - * @param {Function} [orderFunction] - * @return {Function} - * @return {dc.baseMixin} - */ - _chart.ordering = function (orderFunction) { - if (!arguments.length) { - return _ordering; - } - _ordering = orderFunction; - _orderSort = crossfilter.quicksort.by(_ordering); - _chart.expireCache(); - return _chart; - }; - - _chart._computeOrderedGroups = function (data) { - var dataCopy = data.slice(0); - - if (dataCopy.length <= 1) { - return dataCopy; - } - - if (!_orderSort) { - _orderSort = crossfilter.quicksort.by(_ordering); - } - - return _orderSort(dataCopy, 0, dataCopy.length); - }; - - /** - * Clear all filters associated with this chart - * - * The same can be achieved by calling `chart.filter(null)`. - * @name filterAll - * @memberof dc.baseMixin - * @instance - * @return {dc.baseMixin} - */ - _chart.filterAll = function () { - return _chart.filter(null); - }; - - /** - * Execute d3 single selection in the chart's scope using the given selector and return the d3 - * selection. - * - * This function is **not chainable** since it does not return a chart instance; however the d3 - * selection result can be chained to d3 function calls. - * @name select - * @memberof dc.baseMixin - * @instance - * @see {@link https://github.com/mbostock/d3/wiki/Selections d3.selection} - * @example - * // Similar to: - * d3.select('#chart-id').select(selector); - * @return {d3.selection} - */ - _chart.select = function (s) { - return _root.select(s); - }; - - /** - * Execute in scope d3 selectAll using the given selector and return d3 selection result. - * - * This function is **not chainable** since it does not return a chart instance; however the d3 - * selection result can be chained to d3 function calls. - * @name selectAll - * @memberof dc.baseMixin - * @instance - * @see {@link https://github.com/mbostock/d3/wiki/Selections d3.selection} - * @example - * // Similar to: - * d3.select('#chart-id').selectAll(selector); - * @return {d3.selection} - */ - _chart.selectAll = function (s) { - return _root ? _root.selectAll(s) : null; - }; - - /** - * Set the root SVGElement to either be an existing chart's root; or any valid [d3 single - * selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying a dom - * block element such as a div; or a dom element or d3 selection. Optionally registers the chart - * within the chartGroup. This class is called internally on chart initialization, but be called - * again to relocate the chart. However, it will orphan any previously created SVGElements. - * @name anchor - * @memberof dc.baseMixin - * @instance - * @param {anchorChart|anchorSelector|anchorNode} [parent] - * @param {String} [chartGroup] - * @return {String|node|d3.selection} - * @return {dc.baseMixin} - */ - _chart.anchor = function (parent, chartGroup) { - if (!arguments.length) { - return _anchor; - } - if (dc.instanceOfChart(parent)) { - _anchor = parent.anchor(); - _root = parent.root(); - _isChild = true; - } else if (parent) { - if (parent.select && parent.classed) { // detect d3 selection - _anchor = parent.node(); - } else { - _anchor = parent; - } - _root = d3.select(_anchor); - _root.classed(dc.constants.CHART_CLASS, true); - dc.registerChart(_chart, chartGroup); - _isChild = false; - } else { - throw new dc.errors.BadArgumentException('parent must be defined'); - } - _chartGroup = chartGroup; - return _chart; - }; - - /** - * Returns the DOM id for the chart's anchored location. - * @name anchorName - * @memberof dc.baseMixin - * @instance - * @return {String} - */ - _chart.anchorName = function () { - var a = _chart.anchor(); - if (a && a.id) { - return a.id; - } - if (a && a.replace) { - return a.replace('#', ''); - } - return 'dc-chart' + _chart.chartID(); - }; - - /** - * Returns the root element where a chart resides. Usually it will be the parent div element where - * the SVGElement was created. You can also pass in a new root element however this is usually handled by - * dc internally. Resetting the root element on a chart outside of dc internals may have - * unexpected consequences. - * @name root - * @memberof dc.baseMixin - * @instance - * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement HTMLElement} - * @param {HTMLElement} [rootElement] - * @return {HTMLElement} - * @return {dc.baseMixin} - */ - _chart.root = function (rootElement) { - if (!arguments.length) { - return _root; - } - _root = rootElement; - return _chart; - }; - - /** - * Returns the top SVGElement for this specific chart. You can also pass in a new SVGElement, - * however this is usually handled by dc internally. Resetting the SVGElement on a chart outside - * of dc internals may have unexpected consequences. - * @name svg - * @memberof dc.baseMixin - * @instance - * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SVGElement SVGElement} - * @param {SVGElement} [svgElement] - * @return {SVGElement} - * @return {dc.baseMixin} - */ - _chart.svg = function (svgElement) { - if (!arguments.length) { - return _svg; - } - _svg = svgElement; - return _chart; - }; - - /** - * Remove the chart's SVGElements from the dom and recreate the container SVGElement. - * @name resetSvg - * @memberof dc.baseMixin - * @instance - * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SVGElement SVGElement} - * @return {SVGElement} - */ - _chart.resetSvg = function () { - _chart.select('svg').remove(); - return generateSvg(); - }; - - function sizeSvg () { - if (_svg) { - _svg - .attr('width', _chart.width()) - .attr('height', _chart.height()); - } - } - - function generateSvg () { - _svg = _chart.root().append('svg'); - sizeSvg(); - return _svg; - } - - /** - * Set or get the filter printer function. The filter printer function is used to generate human - * friendly text for filter value(s) associated with the chart instance. By default dc charts use a - * default filter printer `dc.printers.filter` that provides simple printing support for both - * single value and ranged filters. - * @name filterPrinter - * @memberof dc.baseMixin - * @instance - * @param {Function} [filterPrinterFunction=dc.printers.filter] - * @return {Function} - * @return {dc.baseMixin} - */ - _chart.filterPrinter = function (filterPrinterFunction) { - if (!arguments.length) { - return _filterPrinter; - } - _filterPrinter = filterPrinterFunction; - return _chart; - }; - - /** - * If set, use the `visibility` attribute instead of the `display` attribute for showing/hiding - * chart reset and filter controls, for less disruption to the layout. - * @name controlsUseVisibility - * @memberof dc.baseMixin - * @instance - * @param {Boolean} useVisibility - * @return {Boolean} - * @return {dc.baseMixin} - **/ - _chart.controlsUseVisibility = function (useVisibility) { - if (!arguments.length) { - return _controlsUseVisibility; - } - _controlsUseVisibility = useVisibility; - return _chart; - }; - - /** - * Turn on optional control elements within the root element. dc currently supports the - * following html control elements. - * * root.selectAll('.reset') - elements are turned on if the chart has an active filter. This type - * of control element is usually used to store a reset link to allow user to reset filter on a - * certain chart. This element will be turned off automatically if the filter is cleared. - * * root.selectAll('.filter') elements are turned on if the chart has an active filter. The text - * content of this element is then replaced with the current filter value using the filter printer - * function. This type of element will be turned off automatically if the filter is cleared. - * @name turnOnControls - * @memberof dc.baseMixin - * @instance - * @return {dc.baseMixin} - */ - _chart.turnOnControls = function () { - if (_root) { - var attribute = _chart.controlsUseVisibility() ? 'visibility' : 'display'; - _chart.selectAll('.reset').style(attribute, null); - _chart.selectAll('.filter').text(_filterPrinter(_chart.filters())).style(attribute, null); - } - return _chart; - }; - - /** - * Turn off optional control elements within the root element. - * @name turnOffControls - * @memberof dc.baseMixin - * @see {@link #dc.baseMixin+turnOnControls turnOnControls} - * @instance - * @return {dc.baseMixin} - */ - _chart.turnOffControls = function () { - if (_root) { - var attribute = _chart.controlsUseVisibility() ? 'visibility' : 'display'; - var value = _chart.controlsUseVisibility() ? 'hidden' : 'none'; - _chart.selectAll('.reset').style(attribute, value); - _chart.selectAll('.filter').style(attribute, value).text(_chart.filter()); - } - return _chart; - }; - - /** - * Set or get the animation transition duration (in milliseconds) for this chart instance. - * @name transitionDuration - * @memberof dc.baseMixin - * @instance - * @param {Number} [duration=750] - * @return {Number} - * @return {dc.baseMixin} - */ - _chart.transitionDuration = function (duration) { - if (!arguments.length) { - return _transitionDuration; - } - _transitionDuration = duration; - return _chart; - }; - - _chart._mandatoryAttributes = function (_) { - if (!arguments.length) { - return _mandatoryAttributes; - } - _mandatoryAttributes = _; - return _chart; - }; - - function checkForMandatoryAttributes (a) { - if (!_chart[a] || !_chart[a]()) { - throw new dc.errors.InvalidStateException('Mandatory attribute chart.' + a + - ' is missing on chart[#' + _chart.anchorName() + ']'); - } - } - - /** - * Invoking this method will force the chart to re-render everything from scratch. Generally it - * should only be used to render the chart for the first time on the page or if you want to make - * sure everything is redrawn from scratch instead of relying on the default incremental redrawing - * behaviour. - * @name render - * @memberof dc.baseMixin - * @instance - * @return {dc.baseMixin} - */ - _chart.render = function () { - _listeners.preRender(_chart); - - if (_mandatoryAttributes) { - _mandatoryAttributes.forEach(checkForMandatoryAttributes); - } - - var result = _chart._doRender(); - - if (_legend) { - _legend.render(); - } - - _chart._activateRenderlets('postRender'); - - return result; - }; - - _chart._activateRenderlets = function (event) { - _listeners.pretransition(_chart); - if (_chart.transitionDuration() > 0 && _svg) { - _svg.transition().duration(_chart.transitionDuration()) - .each('end', function () { - _listeners.renderlet(_chart); - if (event) { - _listeners[event](_chart); - } - }); - } else { - _listeners.renderlet(_chart); - if (event) { - _listeners[event](_chart); - } - } - }; - - /** - * Calling redraw will cause the chart to re-render data changes incrementally. If there is no - * change in the underlying data dimension then calling this method will have no effect on the - * chart. Most chart interaction in dc will automatically trigger this method through internal - * events (in particular [dc.redrawAll](#dcredrawallchartgroup)); therefore, you only need to - * manually invoke this function if data is manipulated outside of dc's control (for example if - * data is loaded in the background using `crossfilter.add()`). - * @name redraw - * @memberof dc.baseMixin - * @instance - * @return {dc.baseMixin} - */ - _chart.redraw = function () { - sizeSvg(); - _listeners.preRedraw(_chart); - - var result = _chart._doRedraw(); - - if (_legend) { - _legend.render(); - } - - _chart._activateRenderlets('postRedraw'); - - return result; - }; - - _chart.redrawGroup = function () { - dc.redrawAll(_chart.chartGroup()); - }; - - _chart.renderGroup = function () { - dc.renderAll(_chart.chartGroup()); - }; - - _chart._invokeFilteredListener = function (f) { - if (f !== undefined) { - _listeners.filtered(_chart, f); - } - }; - - _chart._invokeZoomedListener = function () { - _listeners.zoomed(_chart); - }; - - var _hasFilterHandler = function (filters, filter) { - if (filter === null || typeof(filter) === 'undefined') { - return filters.length > 0; - } - return filters.some(function (f) { - return filter <= f && filter >= f; - }); - }; - - /** - * Set or get the has filter handler. The has filter handler is a function that checks to see if - * the chart's current filters include a specific filter. Using a custom has filter handler allows - * you to change the way filters are checked for and replaced. - * @name hasFilterHandler - * @memberof dc.baseMixin - * @instance - * @example - * // default has filter handler - * chart.hasFilterHandler(function (filters, filter) { - * if (filter === null || typeof(filter) === 'undefined') { - * return filters.length > 0; - * } - * return filters.some(function (f) { - * return filter <= f && filter >= f; - * }); - * }); - * - * // custom filter handler (no-op) - * chart.hasFilterHandler(function(filters, filter) { - * return false; - * }); - * @param {Function} [hasFilterHandler] - * @return {Function} - * @return {dc.baseMixin} - */ - _chart.hasFilterHandler = function (hasFilterHandler) { - if (!arguments.length) { - return _hasFilterHandler; - } - _hasFilterHandler = hasFilterHandler; - return _chart; - }; - - /** - * Check whether any active filter or a specific filter is associated with particular chart instance. - * This function is **not chainable**. - * @name hasFilter - * @memberof dc.baseMixin - * @instance - * @see {@link #dc.baseMixin+hasFilterHandler hasFilterHandler} - * @param {*} [filter] - * @return {Boolean} - */ - _chart.hasFilter = function (filter) { - return _hasFilterHandler(_filters, filter); - }; - - var _removeFilterHandler = function (filters, filter) { - for (var i = 0; i < filters.length; i++) { - if (filters[i] <= filter && filters[i] >= filter) { - filters.splice(i, 1); - break; - } - } - return filters; - }; - - /** - * Set or get the remove filter handler. The remove filter handler is a function that removes a - * filter from the chart's current filters. Using a custom remove filter handler allows you to - * change how filters are removed or perform additional work when removing a filter, e.g. when - * using a filter server other than crossfilter. - * - * Any changes should modify the `filters` array argument and return that array. - * @name removeFilterHandler - * @memberof dc.baseMixin - * @instance - * @example - * // default remove filter handler - * chart.removeFilterHandler(function (filters, filter) { - * for (var i = 0; i < filters.length; i++) { - * if (filters[i] <= filter && filters[i] >= filter) { - * filters.splice(i, 1); - * break; - * } - * } - * return filters; - * }); - * - * // custom filter handler (no-op) - * chart.removeFilterHandler(function(filters, filter) { - * return filters; - * }); - * @param {Function} [removeFilterHandler] - * @return {Function} - * @return {dc.baseMixin} - */ - _chart.removeFilterHandler = function (removeFilterHandler) { - if (!arguments.length) { - return _removeFilterHandler; - } - _removeFilterHandler = removeFilterHandler; - return _chart; - }; - - var _addFilterHandler = function (filters, filter) { - filters.push(filter); - return filters; - }; - - /** - * Set or get the add filter handler. The add filter handler is a function that adds a filter to - * the chart's filter list. Using a custom add filter handler allows you to change the way filters - * are added or perform additional work when adding a filter, e.g. when using a filter server other - * than crossfilter. - * - * Any changes should modify the `filters` array argument and return that array. - * @name addFilterHandler - * @memberof dc.baseMixin - * @instance - * @example - * // default add filter handler - * chart.addFilterHandler(function (filters, filter) { - * filters.push(filter); - * return filters; - * }); - * - * // custom filter handler (no-op) - * chart.addFilterHandler(function(filters, filter) { - * return filters; - * }); - * @param {Function} [addFilterHandler] - * @return {Function} - * @return {dc.baseMixin} - */ - _chart.addFilterHandler = function (addFilterHandler) { - if (!arguments.length) { - return _addFilterHandler; - } - _addFilterHandler = addFilterHandler; - return _chart; - }; - - var _resetFilterHandler = function (filters) { - return []; - }; - - /** - * Set or get the reset filter handler. The reset filter handler is a function that resets the - * chart's filter list by returning a new list. Using a custom reset filter handler allows you to - * change the way filters are reset, or perform additional work when resetting the filters, - * e.g. when using a filter server other than crossfilter. - * - * This function should return an array. - * @name resetFilterHandler - * @memberof dc.baseMixin - * @instance - * @example - * // default remove filter handler - * function (filters) { - * return []; - * } - * - * // custom filter handler (no-op) - * chart.resetFilterHandler(function(filters) { - * return filters; - * }); - * @param {Function} [resetFilterHandler] - * @return {dc.baseMixin} - */ - _chart.resetFilterHandler = function (resetFilterHandler) { - if (!arguments.length) { - return _resetFilterHandler; - } - _resetFilterHandler = resetFilterHandler; - return _chart; - }; - - function applyFilters () { - if (_chart.dimension() && _chart.dimension().filter) { - var fs = _filterHandler(_chart.dimension(), _filters); - _filters = fs ? fs : _filters; - } - } - - _chart.replaceFilter = function (_) { - _filters = []; - _chart.filter(_); - }; - - /** - * Filter the chart by the given value or return the current filter if the input parameter is missing. - * If the passed filter is not currently in the chart's filters, it is added to the filters by the - * {@link #dc.baseMixin+addFilterHandler addFilterHandler}. If a filter exists already within the chart's - * filters, it will be removed by the {@link #dc.baseMixin+removeFilterHandler removeFilterHandler}. If - * a `null` value was passed at the filter, this denotes that the filters should be reset, and is performed - * by the {@link #dc.baseMixin+resetFilterHandler resetFilterHandler}. - * - * Once the filters array has been updated, the filters are applied to the crossfilter.dimension, using the - * {@link #dc.baseMixin+filterHandler filterHandler}. - * @name filter - * @memberof dc.baseMixin - * @instance - * @see {@link #dc.baseMixin+addFilterHandler addFilterHandler} - * @see {@link #dc.baseMixin+removeFilterHandler removeFilterHandler} - * @see {@link #dc.baseMixin+resetFilterHandler resetFilterHandler} - * @see {@link #dc.baseMixin+filterHandler filterHandler} - * @example - * // filter by a single string - * chart.filter('Sunday'); - * // filter by a single age - * chart.filter(18); - * @param {*} [filter] - * @return {dc.baseMixin} - */ - _chart.filter = function (filter) { - if (!arguments.length) { - return _filters.length > 0 ? _filters[0] : null; - } - if (filter instanceof Array && filter[0] instanceof Array && !filter.isFiltered) { - filter[0].forEach(function (d) { - if (_chart.hasFilter(d)) { - _removeFilterHandler(_filters, d); - } else { - _addFilterHandler(_filters, d); - } - }); - } else if (filter === null) { - _filters = _resetFilterHandler(_filters); - } else { - if (_chart.hasFilter(filter)) { - _removeFilterHandler(_filters, filter); - } else { - _addFilterHandler(_filters, filter); - } - } - applyFilters(); - _chart._invokeFilteredListener(filter); - - if (_root !== null && _chart.hasFilter()) { - _chart.turnOnControls(); - } else { - _chart.turnOffControls(); - } - - return _chart; - }; - - /** - * Returns all current filters. This method does not perform defensive cloning of the internal - * filter array before returning, therefore any modification of the returned array will effect the - * chart's internal filter storage. - * @name filters - * @memberof dc.baseMixin - * @instance - * @return {Array<*>} - */ - _chart.filters = function () { - return _filters; - }; - - _chart.highlightSelected = function (e) { - d3.select(e).classed(dc.constants.SELECTED_CLASS, true); - d3.select(e).classed(dc.constants.DESELECTED_CLASS, false); - }; - - _chart.fadeDeselected = function (e) { - d3.select(e).classed(dc.constants.SELECTED_CLASS, false); - d3.select(e).classed(dc.constants.DESELECTED_CLASS, true); - }; - - _chart.resetHighlight = function (e) { - d3.select(e).classed(dc.constants.SELECTED_CLASS, false); - d3.select(e).classed(dc.constants.DESELECTED_CLASS, false); - }; - - /** - * This function is passed to d3 as the onClick handler for each chart. The default behavior is to - * filter on the clicked datum (passed to the callback) and redraw the chart group. - * @name onClick - * @memberof dc.baseMixin - * @instance - * @param {*} datum - */ - _chart.onClick = function (datum) { - var filter = _chart.keyAccessor()(datum); - dc.events.trigger(function () { - _chart.filter(filter); - _chart.redrawGroup(); - }); - }; - - /** - * Set or get the filter handler. The filter handler is a function that performs the filter action - * on a specific dimension. Using a custom filter handler allows you to perform additional logic - * before or after filtering. - * @name filterHandler - * @memberof dc.baseMixin - * @instance - * @see {@link https://github.com/square/crossfilter/wiki/API-Reference#dimension_filter crossfilter.dimension.filter} - * @example - * // default filter handler - * chart.filterHandler(function (dimension, filters) { - * dimension.filter(null); - * if (filters.length === 0) { - * dimension.filter(null); - * } else { - * dimension.filterFunction(function (d) { - * for (var i = 0; i < filters.length; i++) { - * var filter = filters[i]; - * if (filter.isFiltered && filter.isFiltered(d)) { - * return true; - * } else if (filter <= d && filter >= d) { - * return true; - * } - * } - * return false; - * }); - * } - * return filters; - * }); - * - * // custom filter handler - * chart.filterHandler(function(dimension, filter){ - * var newFilter = filter + 10; - * dimension.filter(newFilter); - * return newFilter; // set the actual filter value to the new value - * }); - * @param {Function} [filterHandler] - * @return {Function} - * @return {dc.baseMixin} - */ - _chart.filterHandler = function (filterHandler) { - if (!arguments.length) { - return _filterHandler; - } - _filterHandler = filterHandler; - return _chart; - }; - - // abstract function stub - _chart._doRender = function () { - // do nothing in base, should be overridden by sub-function - return _chart; - }; - - _chart._doRedraw = function () { - // do nothing in base, should be overridden by sub-function - return _chart; - }; - - _chart.legendables = function () { - // do nothing in base, should be overridden by sub-function - return []; - }; - - _chart.legendHighlight = function () { - // do nothing in base, should be overridden by sub-function - }; - - _chart.legendReset = function () { - // do nothing in base, should be overridden by sub-function - }; - - _chart.legendToggle = function () { - // do nothing in base, should be overriden by sub-function - }; - - _chart.isLegendableHidden = function () { - // do nothing in base, should be overridden by sub-function - return false; - }; - - /** - * Set or get the key accessor function. The key accessor function is used to retrieve the key - * value from the crossfilter group. Key values are used differently in different charts, for - * example keys correspond to slices in a pie chart and x axis positions in a grid coordinate chart. - * @name keyAccessor - * @memberof dc.baseMixin - * @instance - * @example - * // default key accessor - * chart.keyAccessor(function(d) { return d.key; }); - * // custom key accessor for a multi-value crossfilter reduction - * chart.keyAccessor(function(p) { return p.value.absGain; }); - * @param {Function} [keyAccessor] - * @return {Function} - * @return {dc.baseMixin} - */ - _chart.keyAccessor = function (keyAccessor) { - if (!arguments.length) { - return _keyAccessor; - } - _keyAccessor = keyAccessor; - return _chart; - }; - - /** - * Set or get the value accessor function. The value accessor function is used to retrieve the - * value from the crossfilter group. Group values are used differently in different charts, for - * example values correspond to slice sizes in a pie chart and y axis positions in a grid - * coordinate chart. - * @name valueAccessor - * @memberof dc.baseMixin - * @instance - * @example - * // default value accessor - * chart.valueAccessor(function(d) { return d.value; }); - * // custom value accessor for a multi-value crossfilter reduction - * chart.valueAccessor(function(p) { return p.value.percentageGain; }); - * @param {Function} [valueAccessor] - * @return {Function} - * @return {dc.baseMixin} - */ - _chart.valueAccessor = function (valueAccessor) { - if (!arguments.length) { - return _valueAccessor; - } - _valueAccessor = valueAccessor; - return _chart; - }; - - /** - * Set or get the label function. The chart class will use this function to render labels for each - * child element in the chart, e.g. slices in a pie chart or bubbles in a bubble chart. Not every - * chart supports the label function for example bar chart and line chart do not use this function - * at all. - * @name label - * @memberof dc.baseMixin - * @instance - * @example - * // default label function just return the key - * chart.label(function(d) { return d.key; }); - * // label function has access to the standard d3 data binding and can get quite complicated - * chart.label(function(d) { return d.data.key + '(' + Math.floor(d.data.value / all.value() * 100) + '%)'; }); - * @param {Function} [labelFunction] - * @return {Function} - * @return {dc.baseMixin} - */ - _chart.label = function (labelFunction) { - if (!arguments.length) { - return _label; - } - _label = labelFunction; - _renderLabel = true; - return _chart; - }; - - /** - * Turn on/off label rendering - * @name renderLabel - * @memberof dc.baseMixin - * @instance - * @param {Boolean} [renderLabel=false] - * @return {Boolean} - * @return {dc.baseMixin} - */ - _chart.renderLabel = function (renderLabel) { - if (!arguments.length) { - return _renderLabel; - } - _renderLabel = renderLabel; - return _chart; - }; - - /** - * Set or get the title function. The chart class will use this function to render the SVGElement title - * (usually interpreted by browser as tooltips) for each child element in the chart, e.g. a slice - * in a pie chart or a bubble in a bubble chart. Almost every chart supports the title function; - * however in grid coordinate charts you need to turn off the brush in order to see titles, because - * otherwise the brush layer will block tooltip triggering. - * @name title - * @memberof dc.baseMixin - * @instance - * @example - * // default title function just return the key - * chart.title(function(d) { return d.key + ': ' + d.value; }); - * // title function has access to the standard d3 data binding and can get quite complicated - * chart.title(function(p) { - * return p.key.getFullYear() - * + '\n' - * + 'Index Gain: ' + numberFormat(p.value.absGain) + '\n' - * + 'Index Gain in Percentage: ' + numberFormat(p.value.percentageGain) + '%\n' - * + 'Fluctuation / Index Ratio: ' + numberFormat(p.value.fluctuationPercentage) + '%'; - * }); - * @param {Function} [titleFunction] - * @return {Function} - * @return {dc.baseMixin} - */ - _chart.title = function (titleFunction) { - if (!arguments.length) { - return _title; - } - _title = titleFunction; - return _chart; - }; - - /** - * Turn on/off title rendering, or return the state of the render title flag if no arguments are - * given. - * @name renderTitle - * @memberof dc.baseMixin - * @instance - * @param {Boolean} [renderTitle=true] - * @return {Boolean} - * @return {dc.baseMixin} - */ - _chart.renderTitle = function (renderTitle) { - if (!arguments.length) { - return _renderTitle; - } - _renderTitle = renderTitle; - return _chart; - }; - - /** - * A renderlet is similar to an event listener on rendering event. Multiple renderlets can be added - * to an individual chart. Each time a chart is rerendered or redrawn the renderlets are invoked - * right after the chart finishes its transitions, giving you a way to modify the SVGElements. - * Renderlet functions take the chart instance as the only input parameter and you can - * use the dc API or use raw d3 to achieve pretty much any effect. - * - * Use {@link #dc.baseMixin+on on} with a 'renderlet' prefix. - * Generates a random key for the renderlet, which makes it hard to remove. - * @name renderlet - * @memberof dc.baseMixin - * @instance - * @deprecated - * @example - * // do this instead of .renderlet(function(chart) { ... }) - * chart.on("renderlet", function(chart){ - * // mix of dc API and d3 manipulation - * chart.select('g.y').style('display', 'none'); - * // its a closure so you can also access other chart variable available in the closure scope - * moveChart.filter(chart.filter()); - * }); - * @param {Function} renderletFunction - * @return {dc.baseMixin} - */ - _chart.renderlet = dc.logger.deprecate(function (renderletFunction) { - _chart.on('renderlet.' + dc.utils.uniqueId(), renderletFunction); - return _chart; - }, 'chart.renderlet has been deprecated. Please use chart.on("renderlet.", renderletFunction)'); - - /** - * Get or set the chart group to which this chart belongs. Chart groups are rendered or redrawn - * together since it is expected they share the same underlying crossfilter data set. - * @name chartGroup - * @memberof dc.baseMixin - * @instance - * @param {String} [chartGroup] - * @return {String} - * @return {dc.baseMixin} - */ - _chart.chartGroup = function (chartGroup) { - if (!arguments.length) { - return _chartGroup; - } - if (!_isChild) { - dc.deregisterChart(_chart, _chartGroup); - } - _chartGroup = chartGroup; - if (!_isChild) { - dc.registerChart(_chart, _chartGroup); - } - return _chart; - }; - - /** - * Expire the internal chart cache. dc charts cache some data internally on a per chart basis to - * speed up rendering and avoid unnecessary calculation; however it might be useful to clear the - * cache if you have changed state which will affect rendering. For example if you invoke the - * `crossfilter.add` function or reset group or dimension after rendering it is a good idea to - * clear the cache to make sure charts are rendered properly. - * @name expireCache - * @memberof dc.baseMixin - * @instance - * @return {dc.baseMixin} - */ - _chart.expireCache = function () { - // do nothing in base, should be overridden by sub-function - return _chart; - }; - - /** - * Attach a dc.legend widget to this chart. The legend widget will automatically draw legend labels - * based on the color setting and names associated with each group. - * @name legend - * @memberof dc.baseMixin - * @instance - * @example - * chart.legend(dc.legend().x(400).y(10).itemHeight(13).gap(5)) - * @param {dc.legend} [legend] - * @return {dc.legend} - * @return {dc.baseMixin} - */ - _chart.legend = function (legend) { - if (!arguments.length) { - return _legend; - } - _legend = legend; - _legend.parent(_chart); - return _chart; - }; - - /** - * Returns the internal numeric ID of the chart. - * @name chartID - * @memberof dc.baseMixin - * @instance - * @return {String} - */ - _chart.chartID = function () { - return _chart.__dcFlag__; - }; - - /** - * Set chart options using a configuration object. Each key in the object will cause the method of - * the same name to be called with the value to set that attribute for the chart. - * @name options - * @memberof dc.baseMixin - * @instance - * @example - * chart.options({dimension: myDimension, group: myGroup}); - * @param {{}} opts - * @return {dc.baseMixin} - */ - _chart.options = function (opts) { - var applyOptions = [ - 'anchor', - 'group', - 'xAxisLabel', - 'yAxisLabel', - 'stack', - 'title', - 'point', - 'getColor', - 'overlayGeoJson' - ]; - - for (var o in opts) { - if (typeof(_chart[o]) === 'function') { - if (opts[o] instanceof Array && applyOptions.indexOf(o) !== -1) { - _chart[o].apply(_chart, opts[o]); - } else { - _chart[o].call(_chart, opts[o]); - } - } else { - dc.logger.debug('Not a valid option setter name: ' + o); - } - } - return _chart; - }; - - /** - * All dc chart instance supports the following listeners. - * Supports the following events: - * * `renderlet` - This listener function will be invoked after transitions after redraw and render. Replaces the - * deprecated {@link #dc.baseMixin+renderlet renderlet} method. - * * `pretransition` - Like `.on('renderlet', ...)` but the event is fired before transitions start. - * * `preRender` - This listener function will be invoked before chart rendering. - * * `postRender` - This listener function will be invoked after chart finish rendering including - * all renderlets' logic. - * * `preRedraw` - This listener function will be invoked before chart redrawing. - * * `postRedraw` - This listener function will be invoked after chart finish redrawing - * including all renderlets' logic. - * * `filtered` - This listener function will be invoked after a filter is applied, added or removed. - * * `zoomed` - This listener function will be invoked after a zoom is triggered. - * @name on - * @memberof dc.baseMixin - * @instance - * @see {@link https://github.com/mbostock/d3/wiki/Internals#dispatch_on d3.dispatch.on} - * @example - * .on('renderlet', function(chart, filter){...}) - * .on('pretransition', function(chart, filter){...}) - * .on('preRender', function(chart){...}) - * .on('postRender', function(chart){...}) - * .on('preRedraw', function(chart){...}) - * .on('postRedraw', function(chart){...}) - * .on('filtered', function(chart, filter){...}) - * .on('zoomed', function(chart, filter){...}) - * @param {String} event - * @param {Function} listener - * @return {dc.baseMixin} - */ - _chart.on = function (event, listener) { - _listeners.on(event, listener); - return _chart; - }; - - return _chart; -}; - -/** - * Margin is a mixin that provides margin utility functions for both the Row Chart and Coordinate Grid - * Charts. - * @name marginMixin - * @memberof dc - * @mixin - * @param {Object} _chart - * @return {dc.marginMixin} - */ -dc.marginMixin = function (_chart) { - var _margin = {top: 10, right: 50, bottom: 30, left: 30}; - - /** - * Get or set the margins for a particular coordinate grid chart instance. The margins is stored as - * an associative Javascript array. - * @name margins - * @memberof dc.marginMixin - * @instance - * @example - * var leftMargin = chart.margins().left; // 30 by default - * chart.margins().left = 50; - * leftMargin = chart.margins().left; // now 50 - * @param {{top: Number, right: Number, left: Number, bottom: Number}} [margins={top: 10, right: 50, bottom: 30, left: 30}] - * @return {{top: Number, right: Number, left: Number, bottom: Number}} - * @return {dc.marginMixin} - */ - _chart.margins = function (margins) { - if (!arguments.length) { - return _margin; - } - _margin = margins; - return _chart; - }; - - _chart.effectiveWidth = function () { - return _chart.width() - _chart.margins().left - _chart.margins().right; - }; - - _chart.effectiveHeight = function () { - return _chart.height() - _chart.margins().top - _chart.margins().bottom; - }; - - return _chart; -}; - -/** - * The Color Mixin is an abstract chart functional class providing universal coloring support - * as a mix-in for any concrete chart implementation. - * @name colorMixin - * @memberof dc - * @mixin - * @param {Object} _chart - * @return {dc.colorMixin} - */ -dc.colorMixin = function (_chart) { - var _colors = d3.scale.category20c(); - var _defaultAccessor = true; - - var _colorAccessor = function (d) { return _chart.keyAccessor()(d); }; - - /** - * Retrieve current color scale or set a new color scale. This methods accepts any function that - * operates like a d3 scale. - * @name colors - * @memberof dc.colorMixin - * @instance - * @see {@link http://github.com/mbostock/d3/wiki/Scales d3.scale} - * @example - * // alternate categorical scale - * chart.colors(d3.scale.category20b()); - * // ordinal scale - * chart.colors(d3.scale.ordinal().range(['red','green','blue'])); - * // convenience method, the same as above - * chart.ordinalColors(['red','green','blue']); - * // set a linear scale - * chart.linearColors(["#4575b4", "#ffffbf", "#a50026"]); - * @param {d3.scale} [colorScale=d3.scale.category20c()] - * @return {d3.scale} - * @return {dc.colorMixin} - */ - _chart.colors = function (colorScale) { - if (!arguments.length) { - return _colors; - } - if (colorScale instanceof Array) { - _colors = d3.scale.quantize().range(colorScale); // deprecated legacy support, note: this fails for ordinal domains - } else { - _colors = d3.functor(colorScale); - } - return _chart; - }; - - /** - * Convenience method to set the color scale to d3.scale.ordinal with range `r`. - * @name ordinalColors - * @memberof dc.colorMixin - * @instance - * @param {Array} r - * @return {dc.colorMixin} - */ - _chart.ordinalColors = function (r) { - return _chart.colors(d3.scale.ordinal().range(r)); - }; - - /** - * Convenience method to set the color scale to an Hcl interpolated linear scale with range `r`. - * @name linearColors - * @memberof dc.colorMixin - * @instance - * @param {Array} r - * @return {dc.colorMixin} - */ - _chart.linearColors = function (r) { - return _chart.colors(d3.scale.linear() - .range(r) - .interpolate(d3.interpolateHcl)); - }; - - /** - * Set or the get color accessor function. This function will be used to map a data point in a - * crossfilter group to a color value on the color scale. The default function uses the key - * accessor. - * @name colorAccessor - * @memberof dc.colorMixin - * @instance - * @example - * // default index based color accessor - * .colorAccessor(function (d, i){return i;}) - * // color accessor for a multi-value crossfilter reduction - * .colorAccessor(function (d){return d.value.absGain;}) - * @param {Function} [colorAccessor] - * @return {Function} - * @return {dc.colorMixin} - */ - _chart.colorAccessor = function (colorAccessor) { - if (!arguments.length) { - return _colorAccessor; - } - _colorAccessor = colorAccessor; - _defaultAccessor = false; - return _chart; - }; - - // what is this? - _chart.defaultColorAccessor = function () { - return _defaultAccessor; - }; - - /** - * Set or get the current domain for the color mapping function. The domain must be supplied as an - * array. - * - * Note: previously this method accepted a callback function. Instead you may use a custom scale - * set by `.colors`. - * @name colorDomain - * @memberof dc.colorMixin - * @instance - * @param {Array} [domain] - * @return {Array} - * @return {dc.colorMixin} - */ - _chart.colorDomain = function (domain) { - if (!arguments.length) { - return _colors.domain(); - } - _colors.domain(domain); - return _chart; - }; - - /** - * Set the domain by determining the min and max values as retrieved by `.colorAccessor` over the - * chart's dataset. - * @name calculateColorDomain - * @memberof dc.colorMixin - * @instance - * @return {dc.colorMixin} - */ - _chart.calculateColorDomain = function () { - var newDomain = [d3.min(_chart.data(), _chart.colorAccessor()), - d3.max(_chart.data(), _chart.colorAccessor())]; - _colors.domain(newDomain); - return _chart; - }; - - /** - * Get the color for the datum d and counter i. This is used internally by charts to retrieve a color. - * @name getColor - * @memberof dc.colorMixin - * @instance - * @param {*} d - * @param {Number} [i] - * @return {String} - */ - _chart.getColor = function (d, i) { - return _colors(_colorAccessor.call(this, d, i)); - }; - - /** - * Get the color for the datum d and counter i. This is used internally by charts to retrieve a color. - * @name colorCalculator - * @memberof dc.colorMixin - * @instance - * @param {*} [colorCalculator] - * @return {*} - */ - _chart.colorCalculator = function (colorCalculator) { - if (!arguments.length) { - return _chart.getColor; - } - _chart.getColor = colorCalculator; - return _chart; - }; - - return _chart; -}; - -/** - * Coordinate Grid is an abstract base chart designed to support a number of coordinate grid based - * concrete chart types, e.g. bar chart, line chart, and bubble chart. - * @name coordinateGridMixin - * @memberof dc - * @mixin - * @mixes dc.colorMixin - * @mixes dc.marginMixin - * @mixes dc.baseMixin - * @param {Object} _chart - * @return {dc.coordinateGridMixin} - */ -dc.coordinateGridMixin = function (_chart) { - var GRID_LINE_CLASS = 'grid-line'; - var HORIZONTAL_CLASS = 'horizontal'; - var VERTICAL_CLASS = 'vertical'; - var Y_AXIS_LABEL_CLASS = 'y-axis-label'; - var X_AXIS_LABEL_CLASS = 'x-axis-label'; - var DEFAULT_AXIS_LABEL_PADDING = 12; - - _chart = dc.colorMixin(dc.marginMixin(dc.baseMixin(_chart))); - - _chart.colors(d3.scale.category10()); - _chart._mandatoryAttributes().push('x'); - - function zoomHandler () { - _refocused = true; - if (_zoomOutRestrict) { - _chart.x().domain(constrainRange(_chart.x().domain(), _xOriginalDomain)); - if (_rangeChart) { - _chart.x().domain(constrainRange(_chart.x().domain(), _rangeChart.x().domain())); - } - } - - var domain = _chart.x().domain(); - var domFilter = dc.filters.RangedFilter(domain[0], domain[1]); - - _chart.replaceFilter(domFilter); - _chart.rescale(); - _chart.redraw(); - - if (_rangeChart && !rangesEqual(_chart.filter(), _rangeChart.filter())) { - dc.events.trigger(function () { - _rangeChart.replaceFilter(domFilter); - _rangeChart.redraw(); - }); - } - - _chart._invokeZoomedListener(); - - dc.events.trigger(function () { - _chart.redrawGroup(); - }, dc.constants.EVENT_DELAY); - - _refocused = !rangesEqual(domain, _xOriginalDomain); - } - - var _parent; - var _g; - var _chartBodyG; - - var _x; - var _xOriginalDomain; - var _xAxis = d3.svg.axis().orient('bottom'); - var _xUnits = dc.units.integers; - var _xAxisPadding = 0; - var _xElasticity = false; - var _xAxisLabel; - var _xAxisLabelPadding = 0; - var _lastXDomain; - - var _y; - var _yAxis = d3.svg.axis().orient('left'); - var _yAxisPadding = 0; - var _yElasticity = false; - var _yAxisLabel; - var _yAxisLabelPadding = 0; - - var _brush = d3.svg.brush(); - var _brushOn = true; - var _round; - - var _renderHorizontalGridLine = false; - var _renderVerticalGridLine = false; - - var _refocused = false, _resizing = false; - var _unitCount; - - var _zoomScale = [1, Infinity]; - var _zoomOutRestrict = true; - - var _zoom = d3.behavior.zoom().on('zoom', zoomHandler); - var _nullZoom = d3.behavior.zoom().on('zoom', null); - var _hasBeenMouseZoomable = false; - - var _rangeChart; - var _focusChart; - - var _mouseZoomable = false; - var _clipPadding = 0; - - var _outerRangeBandPadding = 0.5; - var _rangeBandPadding = 0; - - var _useRightYAxis = false; - - /** - * When changing the domain of the x or y scale, it is necessary to tell the chart to recalculate - * and redraw the axes. (`.rescale()` is called automatically when the x or y scale is replaced - * with `.x()` or `.y()`, and has no effect on elastic scales.) - * @name rescale - * @memberof dc.coordinateGridMixin - * @instance - * @return {dc.coordinateGridMixin} - */ - _chart.rescale = function () { - _unitCount = undefined; - _resizing = true; - return _chart; - }; - - /** - * Get or set the range selection chart associated with this instance. Setting the range selection - * chart using this function will automatically update its selection brush when the current chart - * zooms in. In return the given range chart will also automatically attach this chart as its focus - * chart hence zoom in when range brush updates. See the [Nasdaq 100 - * Index](http://dc-js.github.com/dc.js/) example for this effect in action. - * @name rangeChart - * @memberof dc.coordinateGridMixin - * @instance - * @param {dc.coordinateGridMixin} [rangeChart] - * @return {dc.coordinateGridMixin} - */ - _chart.rangeChart = function (rangeChart) { - if (!arguments.length) { - return _rangeChart; - } - _rangeChart = rangeChart; - _rangeChart.focusChart(_chart); - return _chart; - }; - - /** - * Get or set the scale extent for mouse zooms. - * @name zoomScale - * @memberof dc.coordinateGridMixin - * @instance - * @param {Array} [extent=[1, Infinity]] - * @return {Array} - * @return {dc.coordinateGridMixin} - */ - _chart.zoomScale = function (extent) { - if (!arguments.length) { - return _zoomScale; - } - _zoomScale = extent; - return _chart; - }; - - /** - * Get or set the zoom restriction for the chart. If true limits the zoom to origional domain of the chart. - * @name zoomOutRestrict - * @memberof dc.coordinateGridMixin - * @instance - * @param {Boolean} [zoomOutRestrict=true] - * @return {Boolean} - * @return {dc.coordinateGridMixin} - */ - _chart.zoomOutRestrict = function (zoomOutRestrict) { - if (!arguments.length) { - return _zoomOutRestrict; - } - _zoomScale[0] = zoomOutRestrict ? 1 : 0; - _zoomOutRestrict = zoomOutRestrict; - return _chart; - }; - - _chart._generateG = function (parent) { - if (parent === undefined) { - _parent = _chart.svg(); - } else { - _parent = parent; - } - - _g = _parent.append('g'); - - _chartBodyG = _g.append('g').attr('class', 'chart-body') - .attr('transform', 'translate(' + _chart.margins().left + ', ' + _chart.margins().top + ')') - .attr('clip-path', 'url(#' + getClipPathId() + ')'); - - return _g; - }; - - /** - * Get or set the root g element. This method is usually used to retrieve the g element in order to - * overlay custom svg drawing programatically. **Caution**: The root g element is usually generated - * by dc.js internals, and resetting it might produce unpredictable result. - * @name g - * @memberof dc.coordinateGridMixin - * @instance - * @param {SVGElement} [gElement] - * @return {SVGElement} - * @return {dc.coordinateGridMixin} - */ - _chart.g = function (gElement) { - if (!arguments.length) { - return _g; - } - _g = gElement; - return _chart; - }; - - /** - * Set or get mouse zoom capability flag (default: false). When turned on the chart will be - * zoomable using the mouse wheel. If the range selector chart is attached zooming will also update - * the range selection brush on the associated range selector chart. - * @name mouseZoomable - * @memberof dc.coordinateGridMixin - * @instance - * @param {Boolean} [mouseZoomable=false] - * @return {Boolean} - * @return {dc.coordinateGridMixin} - */ - _chart.mouseZoomable = function (mouseZoomable) { - if (!arguments.length) { - return _mouseZoomable; - } - _mouseZoomable = mouseZoomable; - return _chart; - }; - - /** - * Retrieve the svg group for the chart body. - * @name chartBodyG - * @memberof dc.coordinateGridMixin - * @instance - * @param {SVGElement} [chartBodyG] - * @return {SVGElement} - */ - _chart.chartBodyG = function (chartBodyG) { - if (!arguments.length) { - return _chartBodyG; - } - _chartBodyG = chartBodyG; - return _chart; - }; - - /** - * **mandatory** - * - * Get or set the x scale. The x scale can be any d3 - * [quantitive scale](https://github.com/mbostock/d3/wiki/Quantitative-Scales) or - * [ordinal scale](https://github.com/mbostock/d3/wiki/Ordinal-Scales). - * @name x - * @memberof dc.coordinateGridMixin - * @instance - * @see {@link http://github.com/mbostock/d3/wiki/Scales d3.scale} - * @example - * // set x to a linear scale - * chart.x(d3.scale.linear().domain([-2500, 2500])) - * // set x to a time scale to generate histogram - * chart.x(d3.time.scale().domain([new Date(1985, 0, 1), new Date(2012, 11, 31)])) - * @param {d3.scale} [xScale] - * @return {d3.scale} - * @return {dc.coordinateGridMixin} - */ - _chart.x = function (xScale) { - if (!arguments.length) { - return _x; - } - _x = xScale; - _xOriginalDomain = _x.domain(); - _chart.rescale(); - return _chart; - }; - - _chart.xOriginalDomain = function () { - return _xOriginalDomain; - }; - - /** - * Set or get the xUnits function. The coordinate grid chart uses the xUnits function to calculate - * the number of data projections on x axis such as the number of bars for a bar chart or the - * number of dots for a line chart. This function is expected to return a Javascript array of all - * data points on x axis, or the number of points on the axis. [d3 time range functions - * d3.time.days, d3.time.months, and - * d3.time.years](https://github.com/mbostock/d3/wiki/Time-Intervals#aliases) are all valid xUnits - * function. dc.js also provides a few units function, see the [Utilities](#utilities) section for - * a list of built-in units functions. The default xUnits function is dc.units.integers. - * @name xUnits - * @memberof dc.coordinateGridMixin - * @instance - * @example - * // set x units to count days - * chart.xUnits(d3.time.days); - * // set x units to count months - * chart.xUnits(d3.time.months); - * - * // A custom xUnits function can be used as long as it follows the following interface: - * // units in integer - * function(start, end, xDomain) { - * // simply calculates how many integers in the domain - * return Math.abs(end - start); - * }; - * - * // fixed units - * function(start, end, xDomain) { - * // be aware using fixed units will disable the focus/zoom ability on the chart - * return 1000; - * @param {Function} [xUnits] - * @return {Function} - * @return {dc.coordinateGridMixin} - */ - _chart.xUnits = function (xUnits) { - if (!arguments.length) { - return _xUnits; - } - _xUnits = xUnits; - return _chart; - }; - - /** - * Set or get the x axis used by a particular coordinate grid chart instance. This function is most - * useful when x axis customization is required. The x axis in dc.js is an instance of a [d3 - * axis object](https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-axis); therefore it supports any - * valid d3 axis manipulation. **Caution**: The x axis is usually generated internally by dc; - * resetting it may cause unexpected results. - * @name xAxis - * @memberof dc.coordinateGridMixin - * @instance - * @see {@link http://github.com/mbostock/d3/wiki/SVG-Axes d3.svg.axis} - * @example - * // customize x axis tick format - * chart.xAxis().tickFormat(function(v) {return v + '%';}); - * // customize x axis tick values - * chart.xAxis().tickValues([0, 100, 200, 300]); - * @param {d3.svg.axis} [xAxis=d3.svg.axis().orient('bottom')] - * @return {d3.svg.axis} - * @return {dc.coordinateGridMixin} - */ - _chart.xAxis = function (xAxis) { - if (!arguments.length) { - return _xAxis; - } - _xAxis = xAxis; - return _chart; - }; - - /** - * Turn on/off elastic x axis behavior. If x axis elasticity is turned on, then the grid chart will - * attempt to recalculate the x axis range whenever a redraw event is triggered. - * @name elasticX - * @memberof dc.coordinateGridMixin - * @instance - * @param {Boolean} [elasticX=false] - * @return {Boolean} - * @return {dc.coordinateGridMixin} - */ - _chart.elasticX = function (elasticX) { - if (!arguments.length) { - return _xElasticity; - } - _xElasticity = elasticX; - return _chart; - }; - - /** - * Set or get x axis padding for the elastic x axis. The padding will be added to both end of the x - * axis if elasticX is turned on; otherwise it is ignored. - * - * padding can be an integer or percentage in string (e.g. '10%'). Padding can be applied to - * number or date x axes. When padding a date axis, an integer represents number of days being padded - * and a percentage string will be treated the same as an integer. - * @name xAxisPadding - * @memberof dc.coordinateGridMixin - * @instance - * @param {Number|String} [padding=0] - * @return {Number|String} - * @return {dc.coordinateGridMixin} - */ - _chart.xAxisPadding = function (padding) { - if (!arguments.length) { - return _xAxisPadding; - } - _xAxisPadding = padding; - return _chart; - }; - - /** - * Returns the number of units displayed on the x axis using the unit measure configured by - * .xUnits. - * @name xUnitCount - * @memberof dc.coordinateGridMixin - * @instance - * @return {Number} - */ - _chart.xUnitCount = function () { - if (_unitCount === undefined) { - var units = _chart.xUnits()(_chart.x().domain()[0], _chart.x().domain()[1], _chart.x().domain()); - - if (units instanceof Array) { - _unitCount = units.length; - } else { - _unitCount = units; - } - } - - return _unitCount; - }; - - /** - * Gets or sets whether the chart should be drawn with a right axis instead of a left axis. When - * used with a chart in a composite chart, allows both left and right Y axes to be shown on a - * chart. - * @name useRightYAxis - * @memberof dc.coordinateGridMixin - * @instance - * @param {Boolean} [useRightYAxis=false] - * @return {Boolean} - * @return {dc.coordinateGridMixin} - */ - _chart.useRightYAxis = function (useRightYAxis) { - if (!arguments.length) { - return _useRightYAxis; - } - _useRightYAxis = useRightYAxis; - return _chart; - }; - - /** - * Returns true if the chart is using ordinal xUnits ([dc.units.ordinal](#dcunitsordinal)), or false - * otherwise. Most charts behave differently with ordinal data and use the result of this method to - * trigger the appropriate logic. - * @name isOrdinal - * @memberof dc.coordinateGridMixin - * @instance - * @return {Boolean} - */ - _chart.isOrdinal = function () { - return _chart.xUnits() === dc.units.ordinal; - }; - - _chart._useOuterPadding = function () { - return true; - }; - - _chart._ordinalXDomain = function () { - var groups = _chart._computeOrderedGroups(_chart.data()); - return groups.map(_chart.keyAccessor()); - }; - - function compareDomains (d1, d2) { - return !d1 || !d2 || d1.length !== d2.length || - d1.some(function (elem, i) { return elem.toString() !== d2[i].toString(); }); - } - - function prepareXAxis (g, render) { - if (!_chart.isOrdinal()) { - if (_chart.elasticX()) { - _x.domain([_chart.xAxisMin(), _chart.xAxisMax()]); - } - } else { // _chart.isOrdinal() - if (_chart.elasticX() || _x.domain().length === 0) { - _x.domain(_chart._ordinalXDomain()); - } - } - - // has the domain changed? - var xdom = _x.domain(); - if (render || compareDomains(_lastXDomain, xdom)) { - _chart.rescale(); - } - _lastXDomain = xdom; - - // please can't we always use rangeBands for bar charts? - if (_chart.isOrdinal()) { - _x.rangeBands([0, _chart.xAxisLength()], _rangeBandPadding, - _chart._useOuterPadding() ? _outerRangeBandPadding : 0); - } else { - _x.range([0, _chart.xAxisLength()]); - } - - _xAxis = _xAxis.scale(_chart.x()); - - renderVerticalGridLines(g); - } - - _chart.renderXAxis = function (g) { - var axisXG = g.selectAll('g.x'); - - if (axisXG.empty()) { - axisXG = g.append('g') - .attr('class', 'axis x') - .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart._xAxisY() + ')'); - } - - var axisXLab = g.selectAll('text.' + X_AXIS_LABEL_CLASS); - if (axisXLab.empty() && _chart.xAxisLabel()) { - axisXLab = g.append('text') - .attr('class', X_AXIS_LABEL_CLASS) - .attr('transform', 'translate(' + (_chart.margins().left + _chart.xAxisLength() / 2) + ',' + - (_chart.height() - _xAxisLabelPadding) + ')') - .attr('text-anchor', 'middle'); - } - if (_chart.xAxisLabel() && axisXLab.text() !== _chart.xAxisLabel()) { - axisXLab.text(_chart.xAxisLabel()); - } - - dc.transition(axisXG, _chart.transitionDuration()) - .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart._xAxisY() + ')') - .call(_xAxis); - dc.transition(axisXLab, _chart.transitionDuration()) - .attr('transform', 'translate(' + (_chart.margins().left + _chart.xAxisLength() / 2) + ',' + - (_chart.height() - _xAxisLabelPadding) + ')'); - }; - - function renderVerticalGridLines (g) { - var gridLineG = g.selectAll('g.' + VERTICAL_CLASS); - - if (_renderVerticalGridLine) { - if (gridLineG.empty()) { - gridLineG = g.insert('g', ':first-child') - .attr('class', GRID_LINE_CLASS + ' ' + VERTICAL_CLASS) - .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')'); - } - - var ticks = _xAxis.tickValues() ? _xAxis.tickValues() : - (typeof _x.ticks === 'function' ? _x.ticks(_xAxis.ticks()[0]) : _x.domain()); - - var lines = gridLineG.selectAll('line') - .data(ticks); - - // enter - var linesGEnter = lines.enter() - .append('line') - .attr('x1', function (d) { - return _x(d); - }) - .attr('y1', _chart._xAxisY() - _chart.margins().top) - .attr('x2', function (d) { - return _x(d); - }) - .attr('y2', 0) - .attr('opacity', 0); - dc.transition(linesGEnter, _chart.transitionDuration()) - .attr('opacity', 1); - - // update - dc.transition(lines, _chart.transitionDuration()) - .attr('x1', function (d) { - return _x(d); - }) - .attr('y1', _chart._xAxisY() - _chart.margins().top) - .attr('x2', function (d) { - return _x(d); - }) - .attr('y2', 0); - - // exit - lines.exit().remove(); - } else { - gridLineG.selectAll('line').remove(); - } - } - - _chart._xAxisY = function () { - return (_chart.height() - _chart.margins().bottom); - }; - - _chart.xAxisLength = function () { - return _chart.effectiveWidth(); - }; - - /** - * Set or get the x axis label. If setting the label, you may optionally include additional padding to - * the margin to make room for the label. By default the padded is set to 12 to accomodate the text height. - * @name xAxisLabel - * @memberof dc.coordinateGridMixin - * @instance - * @param {String} [labelText] - * @param {Number} [padding=12] - * @return {String} - */ - _chart.xAxisLabel = function (labelText, padding) { - if (!arguments.length) { - return _xAxisLabel; - } - _xAxisLabel = labelText; - _chart.margins().bottom -= _xAxisLabelPadding; - _xAxisLabelPadding = (padding === undefined) ? DEFAULT_AXIS_LABEL_PADDING : padding; - _chart.margins().bottom += _xAxisLabelPadding; - return _chart; - }; - - _chart._prepareYAxis = function (g) { - if (_y === undefined || _chart.elasticY()) { - if (_y === undefined) { - _y = d3.scale.linear(); - } - var min = _chart.yAxisMin() || 0, - max = _chart.yAxisMax() || 0; - _y.domain([min, max]).rangeRound([_chart.yAxisHeight(), 0]); - } - - _y.range([_chart.yAxisHeight(), 0]); - _yAxis = _yAxis.scale(_y); - - if (_useRightYAxis) { - _yAxis.orient('right'); - } - - _chart._renderHorizontalGridLinesForAxis(g, _y, _yAxis); - }; - - _chart.renderYAxisLabel = function (axisClass, text, rotation, labelXPosition) { - labelXPosition = labelXPosition || _yAxisLabelPadding; - - var axisYLab = _chart.g().selectAll('text.' + Y_AXIS_LABEL_CLASS + '.' + axisClass + '-label'); - var labelYPosition = (_chart.margins().top + _chart.yAxisHeight() / 2); - if (axisYLab.empty() && text) { - axisYLab = _chart.g().append('text') - .attr('transform', 'translate(' + labelXPosition + ',' + labelYPosition + '),rotate(' + rotation + ')') - .attr('class', Y_AXIS_LABEL_CLASS + ' ' + axisClass + '-label') - .attr('text-anchor', 'middle') - .text(text); - } - if (text && axisYLab.text() !== text) { - axisYLab.text(text); - } - dc.transition(axisYLab, _chart.transitionDuration()) - .attr('transform', 'translate(' + labelXPosition + ',' + labelYPosition + '),rotate(' + rotation + ')'); - }; - - _chart.renderYAxisAt = function (axisClass, axis, position) { - var axisYG = _chart.g().selectAll('g.' + axisClass); - if (axisYG.empty()) { - axisYG = _chart.g().append('g') - .attr('class', 'axis ' + axisClass) - .attr('transform', 'translate(' + position + ',' + _chart.margins().top + ')'); - } - - dc.transition(axisYG, _chart.transitionDuration()) - .attr('transform', 'translate(' + position + ',' + _chart.margins().top + ')') - .call(axis); - }; - - _chart.renderYAxis = function () { - var axisPosition = _useRightYAxis ? (_chart.width() - _chart.margins().right) : _chart._yAxisX(); - _chart.renderYAxisAt('y', _yAxis, axisPosition); - var labelPosition = _useRightYAxis ? (_chart.width() - _yAxisLabelPadding) : _yAxisLabelPadding; - var rotation = _useRightYAxis ? 90 : -90; - _chart.renderYAxisLabel('y', _chart.yAxisLabel(), rotation, labelPosition); - }; - - _chart._renderHorizontalGridLinesForAxis = function (g, scale, axis) { - var gridLineG = g.selectAll('g.' + HORIZONTAL_CLASS); - - if (_renderHorizontalGridLine) { - var ticks = axis.tickValues() ? axis.tickValues() : scale.ticks(axis.ticks()[0]); - - if (gridLineG.empty()) { - gridLineG = g.insert('g', ':first-child') - .attr('class', GRID_LINE_CLASS + ' ' + HORIZONTAL_CLASS) - .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')'); - } - - var lines = gridLineG.selectAll('line') - .data(ticks); - - // enter - var linesGEnter = lines.enter() - .append('line') - .attr('x1', 1) - .attr('y1', function (d) { - return scale(d); - }) - .attr('x2', _chart.xAxisLength()) - .attr('y2', function (d) { - return scale(d); - }) - .attr('opacity', 0); - dc.transition(linesGEnter, _chart.transitionDuration()) - .attr('opacity', 1); - - // update - dc.transition(lines, _chart.transitionDuration()) - .attr('x1', 1) - .attr('y1', function (d) { - return scale(d); - }) - .attr('x2', _chart.xAxisLength()) - .attr('y2', function (d) { - return scale(d); - }); - - // exit - lines.exit().remove(); - } else { - gridLineG.selectAll('line').remove(); - } - }; - - _chart._yAxisX = function () { - return _chart.useRightYAxis() ? _chart.width() - _chart.margins().right : _chart.margins().left; - }; - - /** - * Set or get the y axis label. If setting the label, you may optionally include additional padding - * to the margin to make room for the label. By default the padded is set to 12 to accomodate the - * text height. - * @name yAxisLabel - * @memberof dc.coordinateGridMixin - * @instance - * @param {String} [labelText] - * @param {Number} [padding=12] - * @return {String} - * @return {dc.coordinateGridMixin} - */ - _chart.yAxisLabel = function (labelText, padding) { - if (!arguments.length) { - return _yAxisLabel; - } - _yAxisLabel = labelText; - _chart.margins().left -= _yAxisLabelPadding; - _yAxisLabelPadding = (padding === undefined) ? DEFAULT_AXIS_LABEL_PADDING : padding; - _chart.margins().left += _yAxisLabelPadding; - return _chart; - }; - - /** - * Get or set the y scale. The y scale is typically automatically determined by the chart implementation. - * @name y - * @memberof dc.coordinateGridMixin - * @instance - * @see {@link http://github.com/mbostock/d3/wiki/Scales d3.scale} - * @param {d3.scale} [yScale] - * @return {d3.scale} - * @return {dc.coordinateGridMixin} - */ - _chart.y = function (yScale) { - if (!arguments.length) { - return _y; - } - _y = yScale; - _chart.rescale(); - return _chart; - }; - - /** - * Set or get the y axis used by the coordinate grid chart instance. This function is most useful - * when y axis customization is required. The y axis in dc.js is simply an instance of a [d3 axis - * object](https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-_axis); therefore it supports any - * valid d3 axis manipulation. **Caution**: The y axis is usually generated internally by dc; - * resetting it may cause unexpected results. - * @name yAxis - * @memberof dc.coordinateGridMixin - * @instance - * @see {@link http://github.com/mbostock/d3/wiki/SVG-Axes d3.svg.axis} - * @example - * // customize y axis tick format - * chart.yAxis().tickFormat(function(v) {return v + '%';}); - * // customize y axis tick values - * chart.yAxis().tickValues([0, 100, 200, 300]); - * @param {d3.svg.axis} [yAxis=d3.svg.axis().orient('left')] - * @return {d3.svg.axis} - * @return {dc.coordinateGridMixin} - */ - _chart.yAxis = function (yAxis) { - if (!arguments.length) { - return _yAxis; - } - _yAxis = yAxis; - return _chart; - }; - - /** - * Turn on/off elastic y axis behavior. If y axis elasticity is turned on, then the grid chart will - * attempt to recalculate the y axis range whenever a redraw event is triggered. - * @name elasticY - * @memberof dc.coordinateGridMixin - * @instance - * @param {Boolean} [elasticY=false] - * @return {Boolean} - * @return {dc.coordinateGridMixin} - */ - _chart.elasticY = function (elasticY) { - if (!arguments.length) { - return _yElasticity; - } - _yElasticity = elasticY; - return _chart; - }; - - /** - * Turn on/off horizontal grid lines. - * @name renderHorizontalGridLines - * @memberof dc.coordinateGridMixin - * @instance - * @param {Boolean} [renderHorizontalGridLines=false] - * @return {Boolean} - * @return {dc.coordinateGridMixin} - */ - _chart.renderHorizontalGridLines = function (renderHorizontalGridLines) { - if (!arguments.length) { - return _renderHorizontalGridLine; - } - _renderHorizontalGridLine = renderHorizontalGridLines; - return _chart; - }; - - /** - * Turn on/off vertical grid lines. - * @name renderVerticalGridLines - * @memberof dc.coordinateGridMixin - * @instance - * @param {Boolean} [renderVerticalGridLines=false] - * @return {Boolean} - * @return {dc.coordinateGridMixin} - */ - _chart.renderVerticalGridLines = function (renderVerticalGridLines) { - if (!arguments.length) { - return _renderVerticalGridLine; - } - _renderVerticalGridLine = renderVerticalGridLines; - return _chart; - }; - - /** - * Calculates the minimum x value to display in the chart. Includes xAxisPadding if set. - * @name xAxisMin - * @memberof dc.coordinateGridMixin - * @instance - * @return {*} - */ - _chart.xAxisMin = function () { - var min = d3.min(_chart.data(), function (e) { - return _chart.keyAccessor()(e); - }); - return dc.utils.subtract(min, _xAxisPadding); - }; - - /** - * Calculates the maximum x value to display in the chart. Includes xAxisPadding if set. - * @name xAxisMax - * @memberof dc.coordinateGridMixin - * @instance - * @return {*} - */ - _chart.xAxisMax = function () { - var max = d3.max(_chart.data(), function (e) { - return _chart.keyAccessor()(e); - }); - return dc.utils.add(max, _xAxisPadding); - }; - - /** - * Calculates the minimum y value to display in the chart. Includes yAxisPadding if set. - * @name yAxisMin - * @memberof dc.coordinateGridMixin - * @instance - * @return {*} - */ - _chart.yAxisMin = function () { - var min = d3.min(_chart.data(), function (e) { - return _chart.valueAccessor()(e); - }); - return dc.utils.subtract(min, _yAxisPadding); - }; - - /** - * Calculates the maximum y value to display in the chart. Includes yAxisPadding if set. - * @name yAxisMax - * @memberof dc.coordinateGridMixin - * @instance - * @return {*} - */ - _chart.yAxisMax = function () { - var max = d3.max(_chart.data(), function (e) { - return _chart.valueAccessor()(e); - }); - return dc.utils.add(max, _yAxisPadding); - }; - - /** - * Set or get y axis padding for the elastic y axis. The padding will be added to the top of the y - * axis if elasticY is turned on; otherwise it is ignored. - * - * padding can be an integer or percentage in string (e.g. '10%'). Padding can be applied to - * number or date axes. When padding a date axis, an integer represents number of days being padded - * and a percentage string will be treated the same as an integer. - * @name yAxisPadding - * @memberof dc.coordinateGridMixin - * @instance - * @param {Number|String} [padding=0] - * @return {Number} - * @return {dc.coordinateGridMixin} - */ - _chart.yAxisPadding = function (padding) { - if (!arguments.length) { - return _yAxisPadding; - } - _yAxisPadding = padding; - return _chart; - }; - - _chart.yAxisHeight = function () { - return _chart.effectiveHeight(); - }; - - /** - * Set or get the rounding function used to quantize the selection when brushing is enabled. - * @name round - * @memberof dc.coordinateGridMixin - * @instance - * @example - * // set x unit round to by month, this will make sure range selection brush will - * // select whole months - * chart.round(d3.time.month.round); - * @param {Function} [round] - * @return {Function} - * @return {dc.coordinateGridMixin} - */ - _chart.round = function (round) { - if (!arguments.length) { - return _round; - } - _round = round; - return _chart; - }; - - _chart._rangeBandPadding = function (_) { - if (!arguments.length) { - return _rangeBandPadding; - } - _rangeBandPadding = _; - return _chart; - }; - - _chart._outerRangeBandPadding = function (_) { - if (!arguments.length) { - return _outerRangeBandPadding; - } - _outerRangeBandPadding = _; - return _chart; - }; - - dc.override(_chart, 'filter', function (_) { - if (!arguments.length) { - return _chart._filter(); - } - - _chart._filter(_); - - if (_) { - _chart.brush().extent(_); - } else { - _chart.brush().clear(); - } - - return _chart; - }); - - _chart.brush = function (_) { - if (!arguments.length) { - return _brush; - } - _brush = _; - return _chart; - }; - - function brushHeight () { - return _chart._xAxisY() - _chart.margins().top; - } - - _chart.renderBrush = function (g) { - if (_brushOn) { - _brush.on('brush', _chart._brushing); - _brush.on('brushstart', _chart._disableMouseZoom); - _brush.on('brushend', configureMouseZoom); - - var gBrush = g.append('g') - .attr('class', 'brush') - .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')') - .call(_brush.x(_chart.x())); - _chart.setBrushY(gBrush, false); - _chart.setHandlePaths(gBrush); - - if (_chart.hasFilter()) { - _chart.redrawBrush(g, false); - } - } - }; - - _chart.setHandlePaths = function (gBrush) { - gBrush.selectAll('.resize').append('path').attr('d', _chart.resizeHandlePath); - }; - - _chart.setBrushY = function (gBrush) { - gBrush.selectAll('.brush rect') - .attr('height', brushHeight()); - gBrush.selectAll('.resize path') - .attr('d', _chart.resizeHandlePath); - }; - - _chart.extendBrush = function () { - var extent = _brush.extent(); - if (_chart.round()) { - extent[0] = extent.map(_chart.round())[0]; - extent[1] = extent.map(_chart.round())[1]; - - _g.select('.brush') - .call(_brush.extent(extent)); - } - return extent; - }; - - _chart.brushIsEmpty = function (extent) { - return _brush.empty() || !extent || extent[1] <= extent[0]; - }; - - _chart._brushing = function () { - var extent = _chart.extendBrush(); - - _chart.redrawBrush(_g, false); - - if (_chart.brushIsEmpty(extent)) { - dc.events.trigger(function () { - _chart.filter(null); - _chart.redrawGroup(); - }, dc.constants.EVENT_DELAY); - } else { - var rangedFilter = dc.filters.RangedFilter(extent[0], extent[1]); - - dc.events.trigger(function () { - _chart.replaceFilter(rangedFilter); - _chart.redrawGroup(); - }, dc.constants.EVENT_DELAY); - } - }; - - _chart.redrawBrush = function (g, doTransition) { - if (_brushOn) { - if (_chart.filter() && _chart.brush().empty()) { - _chart.brush().extent(_chart.filter()); - } - - var gBrush = dc.optionalTransition(doTransition, _chart.transitionDuration())(g.select('g.brush')); - _chart.setBrushY(gBrush); - gBrush.call(_chart.brush() - .x(_chart.x()) - .extent(_chart.brush().extent())); - } - - _chart.fadeDeselectedArea(); - }; - - _chart.fadeDeselectedArea = function () { - // do nothing, sub-chart should override this function - }; - - // borrowed from Crossfilter example - _chart.resizeHandlePath = function (d) { - var e = +(d === 'e'), x = e ? 1 : -1, y = brushHeight() / 3; - return 'M' + (0.5 * x) + ',' + y + - 'A6,6 0 0 ' + e + ' ' + (6.5 * x) + ',' + (y + 6) + - 'V' + (2 * y - 6) + - 'A6,6 0 0 ' + e + ' ' + (0.5 * x) + ',' + (2 * y) + - 'Z' + - 'M' + (2.5 * x) + ',' + (y + 8) + - 'V' + (2 * y - 8) + - 'M' + (4.5 * x) + ',' + (y + 8) + - 'V' + (2 * y - 8); - }; - - function getClipPathId () { - return _chart.anchorName().replace(/[ .#=\[\]]/g, '-') + '-clip'; - } - - /** - * Get or set the padding in pixels for the clip path. Once set padding will be applied evenly to - * the top, left, right, and bottom when the clip path is generated. If set to zero, the clip area - * will be exactly the chart body area minus the margins. - * @name clipPadding - * @memberof dc.coordinateGridMixin - * @instance - * @param {Number} [padding=5] - * @return {Number} - * @return {dc.coordinateGridMixin} - */ - _chart.clipPadding = function (padding) { - if (!arguments.length) { - return _clipPadding; - } - _clipPadding = padding; - return _chart; - }; - - function generateClipPath () { - var defs = dc.utils.appendOrSelect(_parent, 'defs'); - // cannot select elements; bug in WebKit, must select by id - // https://groups.google.com/forum/#!topic/d3-js/6EpAzQ2gU9I - var id = getClipPathId(); - var chartBodyClip = dc.utils.appendOrSelect(defs, '#' + id, 'clipPath').attr('id', id); - - var padding = _clipPadding * 2; - - dc.utils.appendOrSelect(chartBodyClip, 'rect') - .attr('width', _chart.xAxisLength() + padding) - .attr('height', _chart.yAxisHeight() + padding) - .attr('transform', 'translate(-' + _clipPadding + ', -' + _clipPadding + ')'); - } - - _chart._preprocessData = function () {}; - - _chart._doRender = function () { - _chart.resetSvg(); - - _chart._preprocessData(); - - _chart._generateG(); - generateClipPath(); - - drawChart(true); - - configureMouseZoom(); - - return _chart; - }; - - _chart._doRedraw = function () { - _chart._preprocessData(); - - drawChart(false); - generateClipPath(); - - return _chart; - }; - - function drawChart (render) { - if (_chart.isOrdinal()) { - _brushOn = false; - } - - prepareXAxis(_chart.g(), render); - _chart._prepareYAxis(_chart.g()); - - _chart.plotData(); - - if (_chart.elasticX() || _resizing || render) { - _chart.renderXAxis(_chart.g()); - } - - if (_chart.elasticY() || _resizing || render) { - _chart.renderYAxis(_chart.g()); - } - - if (render) { - _chart.renderBrush(_chart.g(), false); - } else { - _chart.redrawBrush(_chart.g(), _resizing); - } - _chart.fadeDeselectedArea(); - _resizing = false; - } - - function configureMouseZoom () { - if (_mouseZoomable) { - _chart._enableMouseZoom(); - } else if (_hasBeenMouseZoomable) { - _chart._disableMouseZoom(); - } - } - - _chart._enableMouseZoom = function () { - _hasBeenMouseZoomable = true; - _zoom.x(_chart.x()) - .scaleExtent(_zoomScale) - .size([_chart.width(), _chart.height()]) - .duration(_chart.transitionDuration()); - _chart.root().call(_zoom); - }; - - _chart._disableMouseZoom = function () { - _chart.root().call(_nullZoom); - }; - - function constrainRange (range, constraint) { - var constrainedRange = []; - constrainedRange[0] = d3.max([range[0], constraint[0]]); - constrainedRange[1] = d3.min([range[1], constraint[1]]); - return constrainedRange; - } - - /** - * Zoom this chart to focus on the given range. The given range should be an array containing only - * 2 elements (`[start, end]`) defining a range in the x domain. If the range is not given or set - * to null, then the zoom will be reset. _For focus to work elasticX has to be turned off; - * otherwise focus will be ignored. - * @name focus - * @memberof dc.coordinateGridMixin - * @instance - * @example - * chart.on('renderlet', function(chart) { - * // smooth the rendering through event throttling - * dc.events.trigger(function(){ - * // focus some other chart to the range selected by user on this chart - * someOtherChart.focus(chart.filter()); - * }); - * }) - * @param {Array} [range] - */ - _chart.focus = function (range) { - if (hasRangeSelected(range)) { - _chart.x().domain(range); - } else { - _chart.x().domain(_xOriginalDomain); - } - - _zoom.x(_chart.x()); - zoomHandler(); - }; - - _chart.refocused = function () { - return _refocused; - }; - - _chart.focusChart = function (c) { - if (!arguments.length) { - return _focusChart; - } - _focusChart = c; - _chart.on('filtered', function (chart) { - if (!chart.filter()) { - dc.events.trigger(function () { - _focusChart.x().domain(_focusChart.xOriginalDomain()); - }); - } else if (!rangesEqual(chart.filter(), _focusChart.filter())) { - dc.events.trigger(function () { - _focusChart.focus(chart.filter()); - }); - } - }); - return _chart; - }; - - function rangesEqual (range1, range2) { - if (!range1 && !range2) { - return true; - } else if (!range1 || !range2) { - return false; - } else if (range1.length === 0 && range2.length === 0) { - return true; - } else if (range1[0].valueOf() === range2[0].valueOf() && - range1[1].valueOf() === range2[1].valueOf()) { - return true; - } - return false; - } - - /** - * Turn on/off the brush-based range filter. When brushing is on then user can drag the mouse - * across a chart with a quantitative scale to perform range filtering based on the extent of the - * brush, or click on the bars of an ordinal bar chart or slices of a pie chart to filter and - * un-filter them. However turning on the brush filter will disable other interactive elements on - * the chart such as highlighting, tool tips, and reference lines. Zooming will still be possible - * if enabled, but only via scrolling (panning will be disabled.) - * @name brushOn - * @memberof dc.coordinateGridMixin - * @instance - * @param {Boolean} [brushOn=true] - * @return {Boolean} - * @return {dc.coordinateGridMixin} - */ - _chart.brushOn = function (brushOn) { - if (!arguments.length) { - return _brushOn; - } - _brushOn = brushOn; - return _chart; - }; - - function hasRangeSelected (range) { - return range instanceof Array && range.length > 1; - } - - return _chart; -}; - -/** - * Stack Mixin is an mixin that provides cross-chart support of stackability using d3.layout.stack. - * @name stackMixin - * @memberof dc - * @mixin - * @param {Object} _chart - * @return {dc.stackMixin} - */ -dc.stackMixin = function (_chart) { - - function prepareValues (layer, layerIdx) { - var valAccessor = layer.accessor || _chart.valueAccessor(); - layer.name = String(layer.name || layerIdx); - layer.values = layer.group.all().map(function (d, i) { - return { - x: _chart.keyAccessor()(d, i), - y: layer.hidden ? null : valAccessor(d, i), - data: d, - layer: layer.name, - hidden: layer.hidden - }; - }); - - layer.values = layer.values.filter(domainFilter()); - return layer.values; - } - - var _stackLayout = d3.layout.stack() - .values(prepareValues); - - var _stack = []; - var _titles = {}; - - var _hidableStacks = false; - - function domainFilter () { - if (!_chart.x()) { - return d3.functor(true); - } - var xDomain = _chart.x().domain(); - if (_chart.isOrdinal()) { - // TODO #416 - //var domainSet = d3.set(xDomain); - return function () { - return true; //domainSet.has(p.x); - }; - } - if (_chart.elasticX()) { - return function () { return true; }; - } - return function (p) { - //return true; - return p.x >= xDomain[0] && p.x <= xDomain[xDomain.length - 1]; - }; - } - - /** - * Stack a new crossfilter group onto this chart with an optional custom value accessor. All stacks - * in the same chart will share the same key accessor and therefore the same set of keys. - * - * For example, in a stacked bar chart, the bars of each stack will be positioned using the same set - * of keys on the x axis, while stacked vertically. If name is specified then it will be used to - * generate the legend label. - * @name stack - * @memberof dc.stackMixin - * @instance - * @see {@link https://github.com/square/crossfilter/wiki/API-Reference#group-map-reduce crossfilter.group} - * @example - * // stack group using default accessor - * chart.stack(valueSumGroup) - * // stack group using custom accessor - * .stack(avgByDayGroup, function(d){return d.value.avgByDay;}); - * @param {crossfilter.group} group - * @param {String} [name] - * @param {Function} [accessor] - * @return {Array<{group: crossfilter.group, name: String, accessor: Function}>} - * @return {dc.stackMixin} - */ - _chart.stack = function (group, name, accessor) { - if (!arguments.length) { - return _stack; - } - - if (arguments.length <= 2) { - accessor = name; - } - - var layer = {group: group}; - if (typeof name === 'string') { - layer.name = name; - } - if (typeof accessor === 'function') { - layer.accessor = accessor; - } - _stack.push(layer); - - return _chart; - }; - - dc.override(_chart, 'group', function (g, n, f) { - if (!arguments.length) { - return _chart._group(); - } - _stack = []; - _titles = {}; - _chart.stack(g, n); - if (f) { - _chart.valueAccessor(f); - } - return _chart._group(g, n); - }); - - /** - * Allow named stacks to be hidden or shown by clicking on legend items. - * This does not affect the behavior of hideStack or showStack. - * @name hidableStacks - * @memberof dc.stackMixin - * @instance - * @param {Boolean} [hidableStacks=false] - * @return {Boolean} - * @return {dc.stackMixin} - */ - _chart.hidableStacks = function (hidableStacks) { - if (!arguments.length) { - return _hidableStacks; - } - _hidableStacks = hidableStacks; - return _chart; - }; - - function findLayerByName (n) { - var i = _stack.map(dc.pluck('name')).indexOf(n); - return _stack[i]; - } - - /** - * Hide all stacks on the chart with the given name. - * The chart must be re-rendered for this change to appear. - * @name hideStack - * @memberof dc.stackMixin - * @instance - * @param {String} stackName - * @return {dc.stackMixin} - */ - _chart.hideStack = function (stackName) { - var layer = findLayerByName(stackName); - if (layer) { - layer.hidden = true; - } - return _chart; - }; - - /** - * Show all stacks on the chart with the given name. - * The chart must be re-rendered for this change to appear. - * @name showStack - * @memberof dc.stackMixin - * @instance - * @param {String} stackName - * @return {dc.stackMixin} - */ - _chart.showStack = function (stackName) { - var layer = findLayerByName(stackName); - if (layer) { - layer.hidden = false; - } - return _chart; - }; - - _chart.getValueAccessorByIndex = function (index) { - return _stack[index].accessor || _chart.valueAccessor(); - }; - - _chart.yAxisMin = function () { - var min = d3.min(flattenStack(), function (p) { - return (p.y + p.y0 < p.y0) ? (p.y + p.y0) : p.y0; - }); - - return dc.utils.subtract(min, _chart.yAxisPadding()); - - }; - - _chart.yAxisMax = function () { - var max = d3.max(flattenStack(), function (p) { - return p.y + p.y0; - }); - - return dc.utils.add(max, _chart.yAxisPadding()); - }; - - function flattenStack () { - var valueses = _chart.data().map(function (layer) { return layer.values; }); - return Array.prototype.concat.apply([], valueses); - } - - _chart.xAxisMin = function () { - var min = d3.min(flattenStack(), dc.pluck('x')); - return dc.utils.subtract(min, _chart.xAxisPadding()); - }; - - _chart.xAxisMax = function () { - var max = d3.max(flattenStack(), dc.pluck('x')); - return dc.utils.add(max, _chart.xAxisPadding()); - }; - - /** - * Set or get the title function. Chart class will use this function to render svg title (usually interpreted by - * browser as tooltips) for each child element in the chart, i.e. a slice in a pie chart or a bubble in a bubble chart. - * Almost every chart supports title function however in grid coordinate chart you need to turn off brush in order to - * use title otherwise the brush layer will block tooltip trigger. - * - * If the first argument is a stack name, the title function will get or set the title for that stack. If stackName - * is not provided, the first stack is implied. - * @name title - * @memberof dc.stackMixin - * @instance - * @example - * // set a title function on 'first stack' - * chart.title('first stack', function(d) { return d.key + ': ' + d.value; }); - * // get a title function from 'second stack' - * var secondTitleFunction = chart.title('second stack'); - * @param {String} [stackName] - * @param {Function} [titleAccessor] - * @return {String} - * @return {dc.stackMixin} - */ - dc.override(_chart, 'title', function (stackName, titleAccessor) { - if (!stackName) { - return _chart._title(); - } - - if (typeof stackName === 'function') { - return _chart._title(stackName); - } - if (stackName === _chart._groupName && typeof titleAccessor === 'function') { - return _chart._title(titleAccessor); - } - - if (typeof titleAccessor !== 'function') { - return _titles[stackName] || _chart._title(); - } - - _titles[stackName] = titleAccessor; - - return _chart; - }); - - /** - * Gets or sets the stack layout algorithm, which computes a baseline for each stack and - * propagates it to the next - * @name stackLayout - * @memberof dc.stackMixin - * @instance - * @see {@link http://github.com/mbostock/d3/wiki/Stack-Layout d3.layout.stack} - * @param {Function} [stack=d3.layout.stack] - * @return {Function} - * @return {dc.stackMixin} - */ - _chart.stackLayout = function (stack) { - if (!arguments.length) { - return _stackLayout; - } - _stackLayout = stack; - return _chart; - }; - - function visability (l) { - return !l.hidden; - } - - _chart.data(function () { - var layers = _stack.filter(visability); - return layers.length ? _chart.stackLayout()(layers) : []; - }); - - _chart._ordinalXDomain = function () { - var flat = flattenStack().map(dc.pluck('data')); - var ordered = _chart._computeOrderedGroups(flat); - return ordered.map(_chart.keyAccessor()); - }; - - _chart.colorAccessor(function (d) { - var layer = this.layer || this.name || d.name || d.layer; - return layer; - }); - - _chart.legendables = function () { - return _stack.map(function (layer, i) { - return { - chart: _chart, - name: layer.name, - hidden: layer.hidden || false, - color: _chart.getColor.call(layer, layer.values, i) - }; - }); - }; - - _chart.isLegendableHidden = function (d) { - var layer = findLayerByName(d.name); - return layer ? layer.hidden : false; - }; - - _chart.legendToggle = function (d) { - if (_hidableStacks) { - if (_chart.isLegendableHidden(d)) { - _chart.showStack(d.name); - } else { - _chart.hideStack(d.name); - } - //_chart.redraw(); - _chart.renderGroup(); - } - }; - - return _chart; -}; - -/** - * Cap is a mixin that groups small data elements below a _cap_ into an *others* grouping for both the - * Row and Pie Charts. - * - * The top ordered elements in the group up to the cap amount will be kept in the chart, and the rest - * will be replaced with an *others* element, with value equal to the sum of the replaced values. The - * keys of the elements below the cap limit are recorded in order to filter by those keys when the - * others* element is clicked. - * @name capMixin - * @memberof dc - * @mixin - * @param {Object} _chart - * @return {dc.capMixin} - */ -dc.capMixin = function (_chart) { - - var _cap = Infinity; - - var _othersLabel = 'Others'; - - var _othersGrouper = function (topRows) { - var topRowsSum = d3.sum(topRows, _chart.valueAccessor()), - allRows = _chart.group().all(), - allRowsSum = d3.sum(allRows, _chart.valueAccessor()), - topKeys = topRows.map(_chart.keyAccessor()), - allKeys = allRows.map(_chart.keyAccessor()), - topSet = d3.set(topKeys), - others = allKeys.filter(function (d) {return !topSet.has(d);}); - if (allRowsSum > topRowsSum) { - return topRows.concat([{'others': others, 'key': _othersLabel, 'value': allRowsSum - topRowsSum}]); - } - return topRows; - }; - - _chart.cappedKeyAccessor = function (d, i) { - if (d.others) { - return d.key; - } - return _chart.keyAccessor()(d, i); - }; - - _chart.cappedValueAccessor = function (d, i) { - if (d.others) { - return d.value; - } - return _chart.valueAccessor()(d, i); - }; - - _chart.data(function (group) { - if (_cap === Infinity) { - return _chart._computeOrderedGroups(group.all()); - } else { - var topRows = group.top(_cap); // ordered by crossfilter group order (default value) - topRows = _chart._computeOrderedGroups(topRows); // re-order using ordering (default key) - if (_othersGrouper) { - return _othersGrouper(topRows); - } - return topRows; - } - }); - - /** - * Get or set the count of elements to that will be included in the cap. - * @name cap - * @memberof dc.capMixin - * @instance - * @param {Number} [count=Infinity] - * @return {Number} - * @return {dc.capMixin} - */ - _chart.cap = function (count) { - if (!arguments.length) { - return _cap; - } - _cap = count; - return _chart; - }; - - /** - * Get or set the label for *Others* slice when slices cap is specified - * @name othersLabel - * @memberof dc.capMixin - * @instance - * @param {String} [label="Others"] - * @return {String} - * @return {dc.capMixin} - */ - _chart.othersLabel = function (label) { - if (!arguments.length) { - return _othersLabel; - } - _othersLabel = label; - return _chart; - }; - - /** - * Get or set the grouper function that will perform the insertion of data for the *Others* slice - * if the slices cap is specified. If set to a falsy value, no others will be added. By default the - * grouper function computes the sum of all values below the cap. - * @name othersGrouper - * @memberof dc.capMixin - * @instance - * @example - * // Default others grouper - * chart.othersGrouper(function (topRows) { - * var topRowsSum = d3.sum(topRows, _chart.valueAccessor()), - * allRows = _chart.group().all(), - * allRowsSum = d3.sum(allRows, _chart.valueAccessor()), - * topKeys = topRows.map(_chart.keyAccessor()), - * allKeys = allRows.map(_chart.keyAccessor()), - * topSet = d3.set(topKeys), - * others = allKeys.filter(function (d) {return !topSet.has(d);}); - * if (allRowsSum > topRowsSum) { - * return topRows.concat([{'others': others, 'key': _othersLabel, 'value': allRowsSum - topRowsSum}]); - * } - * return topRows; - * }); - * // Custom others grouper - * chart.othersGrouper(function (data) { - * // compute the value for others, presumably the sum of all values below the cap - * var othersSum = yourComputeOthersValueLogic(data) - * - * // the keys are needed to properly filter when the others element is clicked - * var othersKeys = yourComputeOthersKeysArrayLogic(data); - * - * // add the others row to the dataset - * data.push({'key': 'Others', 'value': othersSum, 'others': othersKeys }); - * - * return data; - * }); - * @param {Function} [grouperFunction] - * @return {Function} - * @return {dc.capMixin} - */ - _chart.othersGrouper = function (grouperFunction) { - if (!arguments.length) { - return _othersGrouper; - } - _othersGrouper = grouperFunction; - return _chart; - }; - - dc.override(_chart, 'onClick', function (d) { - if (d.others) { - _chart.filter([d.others]); - } - _chart._onClick(d); - }); - - return _chart; -}; - -/** - * This Mixin provides reusable functionalities for any chart that needs to visualize data using bubbles. - * @name bubbleMixin - * @memberof dc - * @mixin - * @mixes dc.colorMixin - * @param {Object} _chart - * @return {dc.bubbleMixin} - */ -dc.bubbleMixin = function (_chart) { - var _maxBubbleRelativeSize = 0.3; - var _minRadiusWithLabel = 10; - - _chart.BUBBLE_NODE_CLASS = 'node'; - _chart.BUBBLE_CLASS = 'bubble'; - _chart.MIN_RADIUS = 10; - - _chart = dc.colorMixin(_chart); - - _chart.renderLabel(true); - - _chart.data(function (group) { - return group.top(Infinity); - }); - - var _r = d3.scale.linear().domain([0, 100]); - - var _rValueAccessor = function (d) { - return d.r; - }; - - /** - * Get or set the bubble radius scale. By default the bubble chart uses - * `d3.scale.linear().domain([0, 100])` as its radius scale. - * @name r - * @memberof dc.bubbleMixin - * @instance - * @see {@link http://github.com/mbostock/d3/wiki/Scales d3.scale} - * @param {d3.scale} [bubbleRadiusScale=d3.scale.linear().domain([0, 100])] - * @return {d3.scale} - * @return {dc.bubbleMixin} - */ - _chart.r = function (bubbleRadiusScale) { - if (!arguments.length) { - return _r; - } - _r = bubbleRadiusScale; - return _chart; - }; - - /** - * Get or set the radius value accessor function. If set, the radius value accessor function will - * be used to retrieve a data value for each bubble. The data retrieved then will be mapped using - * the r scale to the actual bubble radius. This allows you to encode a data dimension using bubble - * size. - * @name radiusValueAccessor - * @memberof dc.bubbleMixin - * @instance - * @param {Function} [radiusValueAccessor] - * @return {Function} - * @return {dc.bubbleMixin} - */ - _chart.radiusValueAccessor = function (radiusValueAccessor) { - if (!arguments.length) { - return _rValueAccessor; - } - _rValueAccessor = radiusValueAccessor; - return _chart; - }; - - _chart.rMin = function () { - var min = d3.min(_chart.data(), function (e) { - return _chart.radiusValueAccessor()(e); - }); - return min; - }; - - _chart.rMax = function () { - var max = d3.max(_chart.data(), function (e) { - return _chart.radiusValueAccessor()(e); - }); - return max; - }; - - _chart.bubbleR = function (d) { - var value = _chart.radiusValueAccessor()(d); - var r = _chart.r()(value); - if (isNaN(r) || value <= 0) { - r = 0; - } - return r; - }; - - var labelFunction = function (d) { - return _chart.label()(d); - }; - - var labelOpacity = function (d) { - return (_chart.bubbleR(d) > _minRadiusWithLabel) ? 1 : 0; - }; - - _chart._doRenderLabel = function (bubbleGEnter) { - if (_chart.renderLabel()) { - var label = bubbleGEnter.select('text'); - - if (label.empty()) { - label = bubbleGEnter.append('text') - .attr('text-anchor', 'middle') - .attr('dy', '.3em') - .on('click', _chart.onClick); - } - - label - .attr('opacity', 0) - .text(labelFunction); - dc.transition(label, _chart.transitionDuration()) - .attr('opacity', labelOpacity); - } - }; - - _chart.doUpdateLabels = function (bubbleGEnter) { - if (_chart.renderLabel()) { - var labels = bubbleGEnter.selectAll('text') - .text(labelFunction); - dc.transition(labels, _chart.transitionDuration()) - .attr('opacity', labelOpacity); - } - }; - - var titleFunction = function (d) { - return _chart.title()(d); - }; - - _chart._doRenderTitles = function (g) { - if (_chart.renderTitle()) { - var title = g.select('title'); - - if (title.empty()) { - g.append('title').text(titleFunction); - } - } - }; - - _chart.doUpdateTitles = function (g) { - if (_chart.renderTitle()) { - g.selectAll('title').text(titleFunction); - } - }; - - /** - * Get or set the minimum radius. This will be used to initialize the radius scale's range. - * @name minRadius - * @memberof dc.bubbleMixin - * @instance - * @param {Number} [radius=10] - * @return {Number} - * @return {dc.bubbleMixin} - */ - _chart.minRadius = function (radius) { - if (!arguments.length) { - return _chart.MIN_RADIUS; - } - _chart.MIN_RADIUS = radius; - return _chart; - }; - - /** - * Get or set the minimum radius for label rendering. If a bubble's radius is less than this value - * then no label will be rendered. - * @name minRadiusWithLabel - * @memberof dc.bubbleMixin - * @instance - * @param {Number} [radius=10] - * @return {Number} - * @return {dc.bubbleMixin} - */ - - _chart.minRadiusWithLabel = function (radius) { - if (!arguments.length) { - return _minRadiusWithLabel; - } - _minRadiusWithLabel = radius; - return _chart; - }; - - /** - * Get or set the maximum relative size of a bubble to the length of x axis. This value is useful - * when the difference in radius between bubbles is too great. - * @name maxBubbleRelativeSize - * @memberof dc.bubbleMixin - * @instance - * @param {Number} [relativeSize=0.3] - * @return {Number} - * @return {dc.bubbleMixin} - */ - _chart.maxBubbleRelativeSize = function (relativeSize) { - if (!arguments.length) { - return _maxBubbleRelativeSize; - } - _maxBubbleRelativeSize = relativeSize; - return _chart; - }; - - _chart.fadeDeselectedArea = function () { - if (_chart.hasFilter()) { - _chart.selectAll('g.' + _chart.BUBBLE_NODE_CLASS).each(function (d) { - if (_chart.isSelectedNode(d)) { - _chart.highlightSelected(this); - } else { - _chart.fadeDeselected(this); - } - }); - } else { - _chart.selectAll('g.' + _chart.BUBBLE_NODE_CLASS).each(function () { - _chart.resetHighlight(this); - }); - } - }; - - _chart.isSelectedNode = function (d) { - return _chart.hasFilter(d.key); - }; - - _chart.onClick = function (d) { - var filter = d.key; - dc.events.trigger(function () { - _chart.filter(filter); - _chart.redrawGroup(); - }); - }; - - return _chart; -}; - -/** - * The pie chart implementation is usually used to visualize a small categorical distribution. The pie - * chart uses keyAccessor to determine the slices, and valueAccessor to calculate the size of each - * slice relative to the sum of all values. Slices are ordered by `.ordering` which defaults to sorting - * by key. - * @name pieChart - * @memberof dc - * @mixes dc.capMixin - * @mixes dc.colorMixin - * @mixes dc.baseMixin - * @example - * // create a pie chart under #chart-container1 element using the default global chart group - * var chart1 = dc.pieChart('#chart-container1'); - * // create a pie chart under #chart-container2 element using chart group A - * var chart2 = dc.pieChart('#chart-container2', 'chartGroupA'); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {PieChart} - */ -dc.pieChart = function (parent, chartGroup) { - var DEFAULT_MIN_ANGLE_FOR_LABEL = 0.5; - - var _sliceCssClass = 'pie-slice'; - var _emptyCssClass = 'empty-chart'; - var _emptyTitle = 'empty'; - - var _radius, - _givenRadius, // specified radius, if any - _innerRadius = 0, - _externalRadiusPadding = 0; - - var _g; - var _cx; - var _cy; - var _minAngleForLabel = DEFAULT_MIN_ANGLE_FOR_LABEL; - var _externalLabelRadius; - var _chart = dc.capMixin(dc.colorMixin(dc.baseMixin({}))); - - _chart.colorAccessor(_chart.cappedKeyAccessor); - - _chart.title(function (d) { - return _chart.cappedKeyAccessor(d) + ': ' + _chart.cappedValueAccessor(d); - }); - - /** - * Get or set the maximum number of slices the pie chart will generate. The top slices are determined by - * value from high to low. Other slices exeeding the cap will be rolled up into one single *Others* slice. - * @name slicesCap - * @memberof dc.pieChart - * @instance - * @param {Number} [cap] - * @returns {Chart} - */ - _chart.slicesCap = _chart.cap; - - _chart.label(_chart.cappedKeyAccessor); - _chart.renderLabel(true); - - _chart.transitionDuration(350); - - _chart._doRender = function () { - _chart.resetSvg(); - - _g = _chart.svg() - .append('g') - .attr('transform', 'translate(' + _chart.cx() + ',' + _chart.cy() + ')'); - - drawChart(); - - return _chart; - }; - - function drawChart () { - // set radius on basis of chart dimension if missing - _radius = _givenRadius ? _givenRadius : d3.min([_chart.width(), _chart.height()]) / 2; - - var arc = buildArcs(); - - var pie = pieLayout(); - var pieData; - // if we have data... - if (d3.sum(_chart.data(), _chart.valueAccessor())) { - pieData = pie(_chart.data()); - _g.classed(_emptyCssClass, false); - } else { - // otherwise we'd be getting NaNs, so override - // note: abuse others for its ignoring the value accessor - pieData = pie([{key: _emptyTitle, value: 1, others: [_emptyTitle]}]); - _g.classed(_emptyCssClass, true); - } - - if (_g) { - var slices = _g.selectAll('g.' + _sliceCssClass) - .data(pieData); - - createElements(slices, arc, pieData); - - updateElements(pieData, arc); - - removeElements(slices); - - highlightFilter(); - - dc.transition(_g, _chart.transitionDuration()) - .attr('transform', 'translate(' + _chart.cx() + ',' + _chart.cy() + ')'); - } - } - - function createElements (slices, arc, pieData) { - var slicesEnter = createSliceNodes(slices); - - createSlicePath(slicesEnter, arc); - - createTitles(slicesEnter); - - createLabels(pieData, arc); - } - - function createSliceNodes (slices) { - var slicesEnter = slices - .enter() - .append('g') - .attr('class', function (d, i) { - return _sliceCssClass + ' _' + i; - }); - return slicesEnter; - } - - function createSlicePath (slicesEnter, arc) { - var slicePath = slicesEnter.append('path') - .attr('fill', fill) - .on('click', onClick) - .attr('d', function (d, i) { - return safeArc(d, i, arc); - }); - - dc.transition(slicePath, _chart.transitionDuration(), function (s) { - s.attrTween('d', tweenPie); - }); - } - - function createTitles (slicesEnter) { - if (_chart.renderTitle()) { - slicesEnter.append('title').text(function (d) { - return _chart.title()(d.data); - }); - } - } - - function positionLabels (labelsEnter, arc) { - dc.transition(labelsEnter, _chart.transitionDuration()) - .attr('transform', function (d) { - return labelPosition(d, arc); - }) - .attr('text-anchor', 'middle') - .text(function (d) { - var data = d.data; - if ((sliceHasNoData(data) || sliceTooSmall(d)) && !isSelectedSlice(d)) { - return ''; - } - return _chart.label()(d.data); - }); - } - - function createLabels (pieData, arc) { - if (_chart.renderLabel()) { - var labels = _g.selectAll('text.' + _sliceCssClass) - .data(pieData); - - labels.exit().remove(); - - var labelsEnter = labels - .enter() - .append('text') - .attr('class', function (d, i) { - var classes = _sliceCssClass + ' _' + i; - if (_externalLabelRadius) { - classes += ' external'; - } - return classes; - }) - .on('click', onClick); - positionLabels(labelsEnter, arc); - } - } - - function updateElements (pieData, arc) { - updateSlicePaths(pieData, arc); - updateLabels(pieData, arc); - updateTitles(pieData); - } - - function updateSlicePaths (pieData, arc) { - var slicePaths = _g.selectAll('g.' + _sliceCssClass) - .data(pieData) - .select('path') - .attr('d', function (d, i) { - return safeArc(d, i, arc); - }); - dc.transition(slicePaths, _chart.transitionDuration(), - function (s) { - s.attrTween('d', tweenPie); - }).attr('fill', fill); - } - - function updateLabels (pieData, arc) { - if (_chart.renderLabel()) { - var labels = _g.selectAll('text.' + _sliceCssClass) - .data(pieData); - positionLabels(labels, arc); - } - } - - function updateTitles (pieData) { - if (_chart.renderTitle()) { - _g.selectAll('g.' + _sliceCssClass) - .data(pieData) - .select('title') - .text(function (d) { - return _chart.title()(d.data); - }); - } - } - - function removeElements (slices) { - slices.exit().remove(); - } - - function highlightFilter () { - if (_chart.hasFilter()) { - _chart.selectAll('g.' + _sliceCssClass).each(function (d) { - if (isSelectedSlice(d)) { - _chart.highlightSelected(this); - } else { - _chart.fadeDeselected(this); - } - }); - } else { - _chart.selectAll('g.' + _sliceCssClass).each(function () { - _chart.resetHighlight(this); - }); - } - } - - /** - * Get or set the external radius padding of the pie chart. This will force the radius of the - * pie chart to become smaller or larger depending on the value. - * @name externalRadiusPadding - * @memberof dc.pieChart - * @instance - * @param {Number} [externalRadiusPadding=0] - * @returns {Chart} - */ - _chart.externalRadiusPadding = function (externalRadiusPadding) { - if (!arguments.length) { - return _externalRadiusPadding; - } - _externalRadiusPadding = externalRadiusPadding; - return _chart; - }; - - /** - * Get or set the inner radius of the pie chart. If the inner radius is greater than 0px then the - * pie chart will be rendered as a doughnut chart. - * @name innerRadius - * @memberof dc.pieChart - * @instance - * @param {Number} [innerRadius=0] - * @returns {Chart} - */ - _chart.innerRadius = function (innerRadius) { - if (!arguments.length) { - return _innerRadius; - } - _innerRadius = innerRadius; - return _chart; - }; - - /** - * Get or set the outer radius. If the radius is not set, it will be half of the minimum of the - * chart width and height. - * @name radius - * @memberof dc.pieChart - * @instance - * @param {Number} [radius] - * @returns {Chart} - */ - _chart.radius = function (radius) { - if (!arguments.length) { - return _givenRadius; - } - _givenRadius = radius; - return _chart; - }; - - /** - * Get or set center x coordinate position. Default is center of svg. - * @name cx - * @memberof dc.pieChart - * @instance - * @param {Number} [cx] - * @returns {Chart} - */ - _chart.cx = function (cx) { - if (!arguments.length) { - return (_cx || _chart.width() / 2); - } - _cx = cx; - return _chart; - }; - - /** - * Get or set center y coordinate position. Default is center of svg. - * @name cy - * @memberof dc.pieChart - * @instance - * @param {Number} [cy] - * @returns {Chart} - */ - _chart.cy = function (cy) { - if (!arguments.length) { - return (_cy || _chart.height() / 2); - } - _cy = cy; - return _chart; - }; - - function buildArcs () { - return d3.svg.arc().outerRadius(_radius - _externalRadiusPadding).innerRadius(_innerRadius); - } - - function isSelectedSlice (d) { - return _chart.hasFilter(_chart.cappedKeyAccessor(d.data)); - } - - _chart._doRedraw = function () { - drawChart(); - return _chart; - }; - - /** - * Get or set the minimal slice angle for label rendering. Any slice with a smaller angle will not - * display a slice label. - * @name minAngleForLabel - * @memberof dc.pieChart - * @instance - * @param {Number} [minAngleForLabel=0.5] - * @returns {Chart} - */ - _chart.minAngleForLabel = function (minAngleForLabel) { - if (!arguments.length) { - return _minAngleForLabel; - } - _minAngleForLabel = minAngleForLabel; - return _chart; - }; - - function pieLayout () { - return d3.layout.pie().sort(null).value(_chart.cappedValueAccessor); - } - - function sliceTooSmall (d) { - var angle = (d.endAngle - d.startAngle); - return isNaN(angle) || angle < _minAngleForLabel; - } - - function sliceHasNoData (d) { - return _chart.cappedValueAccessor(d) === 0; - } - - function tweenPie (b) { - b.innerRadius = _innerRadius; - var current = this._current; - if (isOffCanvas(current)) { - current = {startAngle: 0, endAngle: 0}; - } - var i = d3.interpolate(current, b); - this._current = i(0); - return function (t) { - return safeArc(i(t), 0, buildArcs()); - }; - } - - function isOffCanvas (current) { - return !current || isNaN(current.startAngle) || isNaN(current.endAngle); - } - - function fill (d, i) { - return _chart.getColor(d.data, i); - } - - function onClick (d, i) { - if (_g.attr('class') !== _emptyCssClass) { - _chart.onClick(d.data, i); - } - } - - function safeArc (d, i, arc) { - var path = arc(d, i); - if (path.indexOf('NaN') >= 0) { - path = 'M0,0'; - } - return path; - } - - /** - * Title to use for the only slice when there is no data. - * @name emptyTitle - * @memberof dc.pieChart - * @instance - * @param {String} [title] - * @returns {Chart} - */ - _chart.emptyTitle = function (title) { - if (arguments.length === 0) { - return _emptyTitle; - } - _emptyTitle = title; - return _chart; - }; - - /** - * Position slice labels offset from the outer edge of the chart - * - * The given argument sets the radial offset. - * @name externalLabels - * @memberof dc.pieChart - * @instance - * @param {Number} [radius] - * @returns {Chart} - */ - _chart.externalLabels = function (radius) { - if (arguments.length === 0) { - return _externalLabelRadius; - } else if (radius) { - _externalLabelRadius = radius; - } else { - _externalLabelRadius = undefined; - } - - return _chart; - }; - - function labelPosition (d, arc) { - var centroid; - if (_externalLabelRadius) { - centroid = d3.svg.arc() - .outerRadius(_radius - _externalRadiusPadding + _externalLabelRadius) - .innerRadius(_radius - _externalRadiusPadding + _externalLabelRadius) - .centroid(d); - } else { - centroid = arc.centroid(d); - } - if (isNaN(centroid[0]) || isNaN(centroid[1])) { - return 'translate(0,0)'; - } else { - return 'translate(' + centroid + ')'; - } - } - - _chart.legendables = function () { - return _chart.data().map(function (d, i) { - var legendable = {name: d.key, data: d.value, others: d.others, chart: _chart}; - legendable.color = _chart.getColor(d, i); - return legendable; - }); - }; - - _chart.legendHighlight = function (d) { - highlightSliceFromLegendable(d, true); - }; - - _chart.legendReset = function (d) { - highlightSliceFromLegendable(d, false); - }; - - _chart.legendToggle = function (d) { - _chart.onClick({key: d.name, others: d.others}); - }; - - function highlightSliceFromLegendable (legendable, highlighted) { - _chart.selectAll('g.pie-slice').each(function (d) { - if (legendable.name === d.data.key) { - d3.select(this).classed('highlight', highlighted); - } - }); - } - - return _chart.anchor(parent, chartGroup); -}; - -/** - * Concrete bar chart/histogram implementation. - * - * Examples: - * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/) - * - [Canadian City Crime Stats](http://dc-js.github.com/dc.js/crime/index.html) - * @name barChart - * @memberof dc - * @mixes dc.stackMixin - * @mixes dc.coordinateGridMixin - * @example - * // create a bar chart under #chart-container1 element using the default global chart group - * var chart1 = dc.barChart('#chart-container1'); - * // create a bar chart under #chart-container2 element using chart group A - * var chart2 = dc.barChart('#chart-container2', 'chartGroupA'); - * // create a sub-chart under a composite parent chart - * var chart3 = dc.barChart(compositeChart); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @return {dc.barChart} - */ -dc.barChart = function (parent, chartGroup) { - var MIN_BAR_WIDTH = 1; - var DEFAULT_GAP_BETWEEN_BARS = 2; - - var _chart = dc.stackMixin(dc.coordinateGridMixin({})); - - var _gap = DEFAULT_GAP_BETWEEN_BARS; - var _centerBar = false; - var _alwaysUseRounding = false; - - var _barWidth; - - dc.override(_chart, 'rescale', function () { - _chart._rescale(); - _barWidth = undefined; - return _chart; - }); - - dc.override(_chart, 'render', function () { - if (_chart.round() && _centerBar && !_alwaysUseRounding) { - dc.logger.warn('By default, brush rounding is disabled if bars are centered. ' + - 'See dc.js bar chart API documentation for details.'); - } - - return _chart._render(); - }); - - _chart.plotData = function () { - var layers = _chart.chartBodyG().selectAll('g.stack') - .data(_chart.data()); - - calculateBarWidth(); - - layers - .enter() - .append('g') - .attr('class', function (d, i) { - return 'stack ' + '_' + i; - }); - - layers.each(function (d, i) { - var layer = d3.select(this); - - renderBars(layer, i, d); - }); - }; - - function barHeight (d) { - return dc.utils.safeNumber(Math.abs(_chart.y()(d.y + d.y0) - _chart.y()(d.y0))); - } - - function renderBars (layer, layerIndex, d) { - var bars = layer.selectAll('rect.bar') - .data(d.values, dc.pluck('x')); - - var enter = bars.enter() - .append('rect') - .attr('class', 'bar') - .attr('fill', dc.pluck('data', _chart.getColor)) - .attr('y', _chart.yAxisHeight()) - .attr('height', 0); - - if (_chart.renderTitle()) { - enter.append('title').text(dc.pluck('data', _chart.title(d.name))); - } - - if (_chart.isOrdinal()) { - bars.on('click', _chart.onClick); - } - - dc.transition(bars, _chart.transitionDuration()) - .attr('x', function (d) { - var x = _chart.x()(d.x); - if (_centerBar) { - x -= _barWidth / 2; - } - if (_chart.isOrdinal() && _gap !== undefined) { - x += _gap / 2; - } - return dc.utils.safeNumber(x); - }) - .attr('y', function (d) { - var y = _chart.y()(d.y + d.y0); - - if (d.y < 0) { - y -= barHeight(d); - } - - return dc.utils.safeNumber(y); - }) - .attr('width', _barWidth) - .attr('height', function (d) { - return barHeight(d); - }) - .attr('fill', dc.pluck('data', _chart.getColor)) - .select('title').text(dc.pluck('data', _chart.title(d.name))); - - dc.transition(bars.exit(), _chart.transitionDuration()) - .attr('height', 0) - .remove(); - } - - function calculateBarWidth () { - if (_barWidth === undefined) { - var numberOfBars = _chart.xUnitCount(); - - // please can't we always use rangeBands for bar charts? - if (_chart.isOrdinal() && _gap === undefined) { - _barWidth = Math.floor(_chart.x().rangeBand()); - } else if (_gap) { - _barWidth = Math.floor((_chart.xAxisLength() - (numberOfBars - 1) * _gap) / numberOfBars); - } else { - _barWidth = Math.floor(_chart.xAxisLength() / (1 + _chart.barPadding()) / numberOfBars); - } - - if (_barWidth === Infinity || isNaN(_barWidth) || _barWidth < MIN_BAR_WIDTH) { - _barWidth = MIN_BAR_WIDTH; - } - } - } - - _chart.fadeDeselectedArea = function () { - var bars = _chart.chartBodyG().selectAll('rect.bar'); - var extent = _chart.brush().extent(); - - if (_chart.isOrdinal()) { - if (_chart.hasFilter()) { - bars.classed(dc.constants.SELECTED_CLASS, function (d) { - return _chart.hasFilter(d.x); - }); - bars.classed(dc.constants.DESELECTED_CLASS, function (d) { - return !_chart.hasFilter(d.x); - }); - } else { - bars.classed(dc.constants.SELECTED_CLASS, false); - bars.classed(dc.constants.DESELECTED_CLASS, false); - } - } else { - if (!_chart.brushIsEmpty(extent)) { - var start = extent[0]; - var end = extent[1]; - - bars.classed(dc.constants.DESELECTED_CLASS, function (d) { - return d.x < start || d.x >= end; - }); - } else { - bars.classed(dc.constants.DESELECTED_CLASS, false); - } - } - }; - - /** - * Whether the bar chart will render each bar centered around the data position on the x-axis. - * @name centerBar - * @memberof dc.barChart - * @instance - * @param {Boolean} [centerBar=false] - * @return {Boolean} - * @return {dc.barChart} - */ - _chart.centerBar = function (centerBar) { - if (!arguments.length) { - return _centerBar; - } - _centerBar = centerBar; - return _chart; - }; - - dc.override(_chart, 'onClick', function (d) { - _chart._onClick(d.data); - }); - - /** - * Get or set the spacing between bars as a fraction of bar size. Valid values are between 0-1. - * Setting this value will also remove any previously set `gap`. See the - * [d3 docs](https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-ordinal_rangeBands) - * for a visual description of how the padding is applied. - * @name barPadding - * @memberof dc.barChart - * @instance - * @param {Number} [barPadding=0] - * @return {Number} - * @return {dc.barChart} - */ - _chart.barPadding = function (barPadding) { - if (!arguments.length) { - return _chart._rangeBandPadding(); - } - _chart._rangeBandPadding(barPadding); - _gap = undefined; - return _chart; - }; - - _chart._useOuterPadding = function () { - return _gap === undefined; - }; - - /** - * Get or set the outer padding on an ordinal bar chart. This setting has no effect on non-ordinal charts. - * Will pad the width by `padding * barWidth` on each side of the chart. - * @name outerPadding - * @memberof dc.barChart - * @instance - * @param {Number} [padding=0.5] - * @return {Number} - * @return {dc.barChart} - */ - _chart.outerPadding = _chart._outerRangeBandPadding; - - /** - * Manually set fixed gap (in px) between bars instead of relying on the default auto-generated - * gap. By default the bar chart implementation will calculate and set the gap automatically - * based on the number of data points and the length of the x axis. - * @name gap - * @memberof dc.barChart - * @instance - * @param {Number} [gap=2] - * @return {Number} - * @return {dc.barChart} - */ - _chart.gap = function (gap) { - if (!arguments.length) { - return _gap; - } - _gap = gap; - return _chart; - }; - - _chart.extendBrush = function () { - var extent = _chart.brush().extent(); - if (_chart.round() && (!_centerBar || _alwaysUseRounding)) { - extent[0] = extent.map(_chart.round())[0]; - extent[1] = extent.map(_chart.round())[1]; - - _chart.chartBodyG().select('.brush') - .call(_chart.brush().extent(extent)); - } - - return extent; - }; - - /** - * Set or get whether rounding is enabled when bars are centered. If false, using - * rounding with centered bars will result in a warning and rounding will be ignored. This flag - * has no effect if bars are not {@link #dc.barChart+centerBar centered}. - * When using standard d3.js rounding methods, the brush often doesn't align correctly with - * centered bars since the bars are offset. The rounding function must add an offset to - * compensate, such as in the following example. - * @name alwaysUseRounding - * @memberof dc.barChart - * @instance - * @example - * chart.round(function(n) { return Math.floor(n) + 0.5; }); - * @param {Boolean} [alwaysUseRounding=false] - * @return {Boolean} - * @return {dc.barChart} - */ - _chart.alwaysUseRounding = function (alwaysUseRounding) { - if (!arguments.length) { - return _alwaysUseRounding; - } - _alwaysUseRounding = alwaysUseRounding; - return _chart; - }; - - function colorFilter (color, inv) { - return function () { - var item = d3.select(this); - var match = item.attr('fill') === color; - return inv ? !match : match; - }; - } - - _chart.legendHighlight = function (d) { - if (!_chart.isLegendableHidden(d)) { - _chart.g().selectAll('rect.bar') - .classed('highlight', colorFilter(d.color)) - .classed('fadeout', colorFilter(d.color, true)); - } - }; - - _chart.legendReset = function () { - _chart.g().selectAll('rect.bar') - .classed('highlight', false) - .classed('fadeout', false); - }; - - dc.override(_chart, 'xAxisMax', function () { - var max = this._xAxisMax(); - if ('resolution' in _chart.xUnits()) { - var res = _chart.xUnits().resolution; - max += res; - } - return max; - }); - - return _chart.anchor(parent, chartGroup); -}; - -/** - * Concrete line/area chart implementation. - * Examples: - * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/) - * - [Canadian City Crime Stats](http://dc-js.github.com/dc.js/crime/index.html) - * @name lineChart - * @memberof dc - * @mixes dc.stackMixin - * @mixes dc.coordinateGridMixin - * @example - * // create a line chart under #chart-container1 element using the default global chart group - * var chart1 = dc.lineChart('#chart-container1'); - * // create a line chart under #chart-container2 element using chart group A - * var chart2 = dc.lineChart('#chart-container2', 'chartGroupA'); - * // create a sub-chart under a composite parent chart - * var chart3 = dc.lineChart(compositeChart); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {LineChart} - */ -dc.lineChart = function (parent, chartGroup) { - var DEFAULT_DOT_RADIUS = 5; - var TOOLTIP_G_CLASS = 'dc-tooltip'; - var DOT_CIRCLE_CLASS = 'dot'; - var Y_AXIS_REF_LINE_CLASS = 'yRef'; - var X_AXIS_REF_LINE_CLASS = 'xRef'; - var DEFAULT_DOT_OPACITY = 1e-6; - - var _chart = dc.stackMixin(dc.coordinateGridMixin({})); - var _renderArea = false; - var _dotRadius = DEFAULT_DOT_RADIUS; - var _dataPointRadius = null; - var _dataPointFillOpacity = DEFAULT_DOT_OPACITY; - var _dataPointStrokeOpacity = DEFAULT_DOT_OPACITY; - var _interpolate = 'linear'; - var _tension = 0.7; - var _defined; - var _dashStyle; - var _xyTipsOn = true; - - _chart.transitionDuration(500); - _chart._rangeBandPadding(1); - - _chart.plotData = function () { - var chartBody = _chart.chartBodyG(); - var layersList = chartBody.selectAll('g.stack-list'); - - if (layersList.empty()) { - layersList = chartBody.append('g').attr('class', 'stack-list'); - } - - var layers = layersList.selectAll('g.stack').data(_chart.data()); - - var layersEnter = layers - .enter() - .append('g') - .attr('class', function (d, i) { - return 'stack ' + '_' + i; - }); - - drawLine(layersEnter, layers); - - drawArea(layersEnter, layers); - - drawDots(chartBody, layers); - }; - - /** - * Gets or sets the interpolator to use for lines drawn, by string name, allowing e.g. step - * functions, splines, and cubic interpolation. This is passed to - * [d3.svg.line.interpolate](https://github.com/mbostock/d3/wiki/SVG-Shapes#line_interpolate) and - * [d3.svg.area.interpolate](https://github.com/mbostock/d3/wiki/SVG-Shapes#area_interpolate), - * where you can find a complete list of valid arguments - * @name interpolate - * @memberof dc.lineChart - * @instance - * @param {String} [interpolate='linear'] - * @returns {Chart} - */ - _chart.interpolate = function (interpolate) { - if (!arguments.length) { - return _interpolate; - } - _interpolate = interpolate; - return _chart; - }; - - /** - * Gets or sets the tension to use for lines drawn, in the range 0 to 1. - * This parameter further customizes the interpolation behavior. It is passed to - * [d3.svg.line.tension](https://github.com/mbostock/d3/wiki/SVG-Shapes#line_tension) and - * [d3.svg.area.tension](https://github.com/mbostock/d3/wiki/SVG-Shapes#area_tension). - * @name tension - * @memberof dc.lineChart - * @instance - * @param {Number} [tension=0.7] - * @returns {Chart} - */ - _chart.tension = function (tension) { - if (!arguments.length) { - return _tension; - } - _tension = tension; - return _chart; - }; - - /** - * Gets or sets a function that will determine discontinuities in the line which should be - * skipped: the path will be broken into separate subpaths if some points are undefined. - * This function is passed to - * [d3.svg.line.defined](https://github.com/mbostock/d3/wiki/SVG-Shapes#line_defined) - * - * Note: crossfilter will sometimes coerce nulls to 0, so you may need to carefully write - * custom reduce functions to get this to work, depending on your data. See - * https://github.com/dc-js/dc.js/issues/615#issuecomment-49089248 - * @name defined - * @memberof dc.lineChart - * @instance - * @param {Function} [defined] - * @returns {Chart} - */ - _chart.defined = function (defined) { - if (!arguments.length) { - return _defined; - } - _defined = defined; - return _chart; - }; - - /** - * Set the line's d3 dashstyle. This value becomes the 'stroke-dasharray' of line. Defaults to empty - * array (solid line). - * @name dashStyle - * @memberof dc.lineChart - * @instance - * @example - * // create a Dash Dot Dot Dot - * chart.dashStyle([3,1,1,1]); - * @param {Array} [dashStyle=[]] - * @returns {Chart} - */ - _chart.dashStyle = function (dashStyle) { - if (!arguments.length) { - return _dashStyle; - } - _dashStyle = dashStyle; - return _chart; - }; - - /** - * Get or set render area flag. If the flag is set to true then the chart will render the area - * beneath each line and the line chart effectively becomes an area chart. - * @name renderArea - * @memberof dc.lineChart - * @instance - * @param {Boolean} [renderArea=false] - * @returns {Chart} - */ - _chart.renderArea = function (renderArea) { - if (!arguments.length) { - return _renderArea; - } - _renderArea = renderArea; - return _chart; - }; - - function colors (d, i) { - return _chart.getColor.call(d, d.values, i); - } - - function drawLine (layersEnter, layers) { - var line = d3.svg.line() - .x(function (d) { - return _chart.x()(d.x); - }) - .y(function (d) { - return _chart.y()(d.y + d.y0); - }) - .interpolate(_interpolate) - .tension(_tension); - if (_defined) { - line.defined(_defined); - } - - var path = layersEnter.append('path') - .attr('class', 'line') - .attr('stroke', colors); - if (_dashStyle) { - path.attr('stroke-dasharray', _dashStyle); - } - - dc.transition(layers.select('path.line'), _chart.transitionDuration()) - //.ease('linear') - .attr('stroke', colors) - .attr('d', function (d) { - return safeD(line(d.values)); - }); - } - - function drawArea (layersEnter, layers) { - if (_renderArea) { - var area = d3.svg.area() - .x(function (d) { - return _chart.x()(d.x); - }) - .y(function (d) { - return _chart.y()(d.y + d.y0); - }) - .y0(function (d) { - return _chart.y()(d.y0); - }) - .interpolate(_interpolate) - .tension(_tension); - if (_defined) { - area.defined(_defined); - } - - layersEnter.append('path') - .attr('class', 'area') - .attr('fill', colors) - .attr('d', function (d) { - return safeD(area(d.values)); - }); - - dc.transition(layers.select('path.area'), _chart.transitionDuration()) - //.ease('linear') - .attr('fill', colors) - .attr('d', function (d) { - return safeD(area(d.values)); - }); - } - } - - function safeD (d) { - return (!d || d.indexOf('NaN') >= 0) ? 'M0,0' : d; - } - - function drawDots (chartBody, layers) { - if (!_chart.brushOn() && _chart.xyTipsOn()) { - var tooltipListClass = TOOLTIP_G_CLASS + '-list'; - var tooltips = chartBody.select('g.' + tooltipListClass); - - if (tooltips.empty()) { - tooltips = chartBody.append('g').attr('class', tooltipListClass); - } - - layers.each(function (d, layerIndex) { - var points = d.values; - if (_defined) { - points = points.filter(_defined); - } - - var g = tooltips.select('g.' + TOOLTIP_G_CLASS + '._' + layerIndex); - if (g.empty()) { - g = tooltips.append('g').attr('class', TOOLTIP_G_CLASS + ' _' + layerIndex); - } - - createRefLines(g); - - var dots = g.selectAll('circle.' + DOT_CIRCLE_CLASS) - .data(points, dc.pluck('x')); - - dots.enter() - .append('circle') - .attr('class', DOT_CIRCLE_CLASS) - .attr('r', getDotRadius()) - .style('fill-opacity', _dataPointFillOpacity) - .style('stroke-opacity', _dataPointStrokeOpacity) - .on('mousemove', function () { - var dot = d3.select(this); - showDot(dot); - showRefLines(dot, g); - }) - .on('mouseout', function () { - var dot = d3.select(this); - hideDot(dot); - hideRefLines(g); - }); - - dots - .attr('cx', function (d) { - return dc.utils.safeNumber(_chart.x()(d.x)); - }) - .attr('cy', function (d) { - return dc.utils.safeNumber(_chart.y()(d.y + d.y0)); - }) - .attr('fill', _chart.getColor) - .call(renderTitle, d); - - dots.exit().remove(); - }); - } - } - - function createRefLines (g) { - var yRefLine = g.select('path.' + Y_AXIS_REF_LINE_CLASS).empty() ? - g.append('path').attr('class', Y_AXIS_REF_LINE_CLASS) : g.select('path.' + Y_AXIS_REF_LINE_CLASS); - yRefLine.style('display', 'none').attr('stroke-dasharray', '5,5'); - - var xRefLine = g.select('path.' + X_AXIS_REF_LINE_CLASS).empty() ? - g.append('path').attr('class', X_AXIS_REF_LINE_CLASS) : g.select('path.' + X_AXIS_REF_LINE_CLASS); - xRefLine.style('display', 'none').attr('stroke-dasharray', '5,5'); - } - - function showDot (dot) { - dot.style('fill-opacity', 0.8); - dot.style('stroke-opacity', 0.8); - dot.attr('r', _dotRadius); - return dot; - } - - function showRefLines (dot, g) { - var x = dot.attr('cx'); - var y = dot.attr('cy'); - var yAxisX = (_chart._yAxisX() - _chart.margins().left); - var yAxisRefPathD = 'M' + yAxisX + ' ' + y + 'L' + (x) + ' ' + (y); - var xAxisRefPathD = 'M' + x + ' ' + _chart.yAxisHeight() + 'L' + x + ' ' + y; - g.select('path.' + Y_AXIS_REF_LINE_CLASS).style('display', '').attr('d', yAxisRefPathD); - g.select('path.' + X_AXIS_REF_LINE_CLASS).style('display', '').attr('d', xAxisRefPathD); - } - - function getDotRadius () { - return _dataPointRadius || _dotRadius; - } - - function hideDot (dot) { - dot.style('fill-opacity', _dataPointFillOpacity) - .style('stroke-opacity', _dataPointStrokeOpacity) - .attr('r', getDotRadius()); - } - - function hideRefLines (g) { - g.select('path.' + Y_AXIS_REF_LINE_CLASS).style('display', 'none'); - g.select('path.' + X_AXIS_REF_LINE_CLASS).style('display', 'none'); - } - - function renderTitle (dot, d) { - if (_chart.renderTitle()) { - dot.selectAll('title').remove(); - dot.append('title').text(dc.pluck('data', _chart.title(d.name))); - } - } - - /** - * Turn on/off the mouseover behavior of an individual data point which renders a circle and x/y axis - * dashed lines back to each respective axis. This is ignored if the chart brush is on (`brushOn`) - * @name xyTipsOn - * @memberof dc.lineChart - * @instance - * @param {Boolean} [xyTipsOn=false] - * @returns {Chart} - */ - _chart.xyTipsOn = function (xyTipsOn) { - if (!arguments.length) { - return _xyTipsOn; - } - _xyTipsOn = xyTipsOn; - return _chart; - }; - - /** - * Get or set the radius (in px) for dots displayed on the data points. - * @name dotRadius - * @memberof dc.lineChart - * @instance - * @param {Number} [dotRadius=5] - * @returns {Chart} - */ - _chart.dotRadius = function (dotRadius) { - if (!arguments.length) { - return _dotRadius; - } - _dotRadius = dotRadius; - return _chart; - }; - - /** - * Always show individual dots for each datapoint. - * If `options` is falsy, it disables data point rendering. - * - * If no `options` are provided, the current `options` values are instead returned. - * @name renderDataPoints - * @memberof dc.lineChart - * @instance - * @example - * chart.renderDataPoints({radius: 2, fillOpacity: 0.8, strokeOpacity: 0.8}) - * @param {{fillOpacity: Number, strokeOpacity: Number, radius: Number}} [options={fillOpacity: 0.8, strokeOpacity: 0.8, radius: 2}] - * @returns {Chart} - */ - _chart.renderDataPoints = function (options) { - if (!arguments.length) { - return { - fillOpacity: _dataPointFillOpacity, - strokeOpacity: _dataPointStrokeOpacity, - radius: _dataPointRadius - }; - } else if (!options) { - _dataPointFillOpacity = DEFAULT_DOT_OPACITY; - _dataPointStrokeOpacity = DEFAULT_DOT_OPACITY; - _dataPointRadius = null; - } else { - _dataPointFillOpacity = options.fillOpacity || 0.8; - _dataPointStrokeOpacity = options.strokeOpacity || 0.8; - _dataPointRadius = options.radius || 2; - } - return _chart; - }; - - function colorFilter (color, dashstyle, inv) { - return function () { - var item = d3.select(this); - var match = (item.attr('stroke') === color && - item.attr('stroke-dasharray') === ((dashstyle instanceof Array) ? - dashstyle.join(',') : null)) || item.attr('fill') === color; - return inv ? !match : match; - }; - } - - _chart.legendHighlight = function (d) { - if (!_chart.isLegendableHidden(d)) { - _chart.g().selectAll('path.line, path.area') - .classed('highlight', colorFilter(d.color, d.dashstyle)) - .classed('fadeout', colorFilter(d.color, d.dashstyle, true)); - } - }; - - _chart.legendReset = function () { - _chart.g().selectAll('path.line, path.area') - .classed('highlight', false) - .classed('fadeout', false); - }; - - dc.override(_chart, 'legendables', function () { - var legendables = _chart._legendables(); - if (!_dashStyle) { - return legendables; - } - return legendables.map(function (l) { - l.dashstyle = _dashStyle; - return l; - }); - }); - - return _chart.anchor(parent, chartGroup); -}; - -/** - * The data count widget is a simple widget designed to display the number of records selected by the - * current filters out of the total number of records in the data set. Once created the data count widget - * will automatically update the text content of the following elements under the parent element. - * - * '.total-count' - total number of records - * '.filter-count' - number of records matched by the current filters - * - * Examples: - * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/) - * @name dataCount - * @memberof dc - * @mixes dc.baseMixin - * @example - * var ndx = crossfilter(data); - * var all = ndx.groupAll(); - * - * dc.dataCount('.dc-data-count') - * .dimension(ndx) - * .group(all); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {DataCount} - */ -dc.dataCount = function (parent, chartGroup) { - var _formatNumber = d3.format(',d'); - var _chart = dc.baseMixin({}); - var _html = {some: '', all: ''}; - - /** - * Gets or sets an optional object specifying HTML templates to use depending how many items are - * selected. The text `%total-count` will replaced with the total number of records, and the text - * `%filter-count` will be replaced with the number of selected records. - * - all: HTML template to use if all items are selected - * - some: HTML template to use if not all items are selected - * @name html - * @memberof dc.dataCount - * @instance - * @example - * counter.html({ - * some: '%filter-count out of %total-count records selected', - * all: 'All records selected. Click on charts to apply filters' - * }) - * @param {{some:String, all: String}} [options] - * @returns {Chart} - */ - _chart.html = function (options) { - if (!arguments.length) { - return _html; - } - if (options.all) { - _html.all = options.all; - } - if (options.some) { - _html.some = options.some; - } - return _chart; - }; - - /** - * Gets or sets an optional function to format the filter count and total count. - * @name formatNumber - * @memberof dc.dataCount - * @instance - * @example - * counter.formatNumber(d3.format('.2g')) - * @param {Function} [formatter=d3.format('.2g')] - * @returns {Chart} - */ - _chart.formatNumber = function (formatter) { - if (!arguments.length) { - return _formatNumber; - } - _formatNumber = formatter; - return _chart; - }; - - _chart._doRender = function () { - var tot = _chart.dimension().size(), - val = _chart.group().value(); - var all = _formatNumber(tot); - var selected = _formatNumber(val); - - if ((tot === val) && (_html.all !== '')) { - _chart.root().html(_html.all.replace('%total-count', all).replace('%filter-count', selected)); - } else if (_html.some !== '') { - _chart.root().html(_html.some.replace('%total-count', all).replace('%filter-count', selected)); - } else { - _chart.selectAll('.total-count').text(all); - _chart.selectAll('.filter-count').text(selected); - } - return _chart; - }; - - _chart._doRedraw = function () { - return _chart._doRender(); - }; - - return _chart.anchor(parent, chartGroup); -}; - -/** - * The data table is a simple widget designed to list crossfilter focused data set (rows being - * filtered) in a good old tabular fashion. - * - * Note: Unlike other charts, the data table (and data grid chart) use the group attribute as a keying function - * for [nesting](https://github.com/mbostock/d3/wiki/Arrays#-nest) the data together in groups. - * Do not pass in a crossfilter group as this will not work. - * - * Examples: - * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/) - * @name dataTable - * @memberof dc - * @mixes dc.baseMixin - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {DataTable} - */ -dc.dataTable = function (parent, chartGroup) { - var LABEL_CSS_CLASS = 'dc-table-label'; - var ROW_CSS_CLASS = 'dc-table-row'; - var COLUMN_CSS_CLASS = 'dc-table-column'; - var GROUP_CSS_CLASS = 'dc-table-group'; - var HEAD_CSS_CLASS = 'dc-table-head'; - - var _chart = dc.baseMixin({}); - - var _size = 25; - var _columns = []; - var _sortBy = function (d) { - return d; - }; - var _order = d3.ascending; - var _showGroups = true; - - _chart._doRender = function () { - _chart.selectAll('tbody').remove(); - - renderRows(renderGroups()); - - return _chart; - }; - - _chart._doColumnValueFormat = function (v, d) { - return ((typeof v === 'function') ? - v(d) : // v as function - ((typeof v === 'string') ? - d[v] : // v is field name string - v.format(d) // v is Object, use fn (element 2) - ) - ); - }; - - _chart._doColumnHeaderFormat = function (d) { - // if 'function', convert to string representation - // show a string capitalized - // if an object then display it's label string as-is. - return (typeof d === 'function') ? - _chart._doColumnHeaderFnToString(d) : - ((typeof d === 'string') ? - _chart._doColumnHeaderCapitalize(d) : String(d.label)); - }; - - _chart._doColumnHeaderCapitalize = function (s) { - // capitalize - return s.charAt(0).toUpperCase() + s.slice(1); - }; - - _chart._doColumnHeaderFnToString = function (f) { - // columnString(f) { - var s = String(f); - var i1 = s.indexOf('return '); - if (i1 >= 0) { - var i2 = s.lastIndexOf(';'); - if (i2 >= 0) { - s = s.substring(i1 + 7, i2); - var i3 = s.indexOf('numberFormat'); - if (i3 >= 0) { - s = s.replace('numberFormat', ''); - } - } - } - return s; - }; - - function renderGroups () { - // The 'original' example uses all 'functions'. - // If all 'functions' are used, then don't remove/add a header, and leave - // the html alone. This preserves the functionality of earlier releases. - // A 2nd option is a string representing a field in the data. - // A third option is to supply an Object such as an array of 'information', and - // supply your own _doColumnHeaderFormat and _doColumnValueFormat functions to - // create what you need. - var bAllFunctions = true; - _columns.forEach(function (f) { - bAllFunctions = bAllFunctions & (typeof f === 'function'); - }); - - if (!bAllFunctions) { - _chart.selectAll('th').remove(); - var headcols = _chart.root().selectAll('th') - .data(_columns); - - var headGroup = headcols - .enter() - .append('th'); - - headGroup - .attr('class', HEAD_CSS_CLASS) - .html(function (d) { - return (_chart._doColumnHeaderFormat(d)); - - }); - } - - var groups = _chart.root().selectAll('tbody') - .data(nestEntries(), function (d) { - return _chart.keyAccessor()(d); - }); - - var rowGroup = groups - .enter() - .append('tbody'); - - if (_showGroups === true) { - rowGroup - .append('tr') - .attr('class', GROUP_CSS_CLASS) - .append('td') - .attr('class', LABEL_CSS_CLASS) - .attr('colspan', _columns.length) - .html(function (d) { - return _chart.keyAccessor()(d); - }); - } - - groups.exit().remove(); - - return rowGroup; - } - - function nestEntries () { - var entries; - if (_order === d3.ascending) { - entries = _chart.dimension().bottom(_size); - } else { - entries = _chart.dimension().top(_size); - } - - return d3.nest() - .key(_chart.group()) - .sortKeys(_order) - .entries(entries.sort(function (a, b) { - return _order(_sortBy(a), _sortBy(b)); - })); - } - - function renderRows (groups) { - var rows = groups.order() - .selectAll('tr.' + ROW_CSS_CLASS) - .data(function (d) { - return d.values; - }); - - var rowEnter = rows.enter() - .append('tr') - .attr('class', ROW_CSS_CLASS); - - _columns.forEach(function (v, i) { - rowEnter.append('td') - .attr('class', COLUMN_CSS_CLASS + ' _' + i) - .html(function (d) { - return _chart._doColumnValueFormat(v, d); - }); - }); - - rows.exit().remove(); - - return rows; - } - - _chart._doRedraw = function () { - return _chart._doRender(); - }; - - /** - * Get or set the table size which determines the number of rows displayed by the widget. - * @name size - * @memberof dc.dataTable - * @instance - * @param {Number} [size=25] - * @returns {Chart} - */ - _chart.size = function (size) { - if (!arguments.length) { - return _size; - } - _size = size; - return _chart; - }; - - /** - * Get or set column functions. The data table widget now supports several methods of specifying - * the columns to display. The original method, first shown below, uses an array of functions to - * generate dynamic columns. Column functions are simple javascript functions with only one input - * argument `d` which represents a row in the data set. The return value of these functions will be - * used directly to generate table content for each cell. However, this method requires the .html - * table entry to have a fixed set of column headers. - * - * The second example shows you can simply list the data (d) content directly without - * specifying it as a function, except where necessary (ie, computed columns). Note - * the data element accessor name is capitalized when displayed in the table. You can - * also mix in functions as desired or necessary, but you must use the - * Object = [Label, Fn] method as shown below. - * You may wish to override the following two functions, which are internally used to - * translate the column information or function into a displayed header. The first one - * is used on the simple "string" column specifier, the second is used to transform the - * String(fn) into something displayable. For the Stock example, the function for Change - * becomes a header of 'd.close - d.open'. - * _chart._doColumnHeaderCapitalize _chart._doColumnHeaderFnToString - * You may use your own Object definition, however you must then override - * _chart._doColumnHeaderFormat , _chart._doColumnValueFormat - * Be aware that fields without numberFormat specification will be displayed just as - * they are stored in the data, unformatted. - * - * The third example, where all fields are specified using the Object = [Label, Fn] method. - * @name columns - * @memberof dc.dataTable - * @instance - * @example - * chart.columns([ - * function(d) { return d.date; }, - * function(d) { return d.open; }, - * function(d) { return d.close; }, - * function(d) { return numberFormat(d.close - d.open); }, - * function(d) { return d.volume; } - * ]); - * @example - * chart.columns([ - * "date", // d["date"], ie, a field accessor; capitalized automatically - * "open", // ... - * "close", // ... - * ["Change", // Specify an Object = [Label, Fn] - * function (d) { return numberFormat(d.close - d.open); }], - * "volume" // d["volume"], ie, a field accessor; capitalized automatically - * ]); - * @example - * chart.columns([ - * ["Date", // Specify an Object = [Label, Fn] - * function (d) { return d.date; }], - * ["Open", - * function (d) { return numberFormat(d.open); }], - * ["Close", - * function (d) { return numberFormat(d.close); }], - * ["Change", - * function (d) { return numberFormat(d.close - d.open); }], - * ["Volume", - * function (d) { return d.volume; }] - * ]); - * @param {Array} [columns=[]] - * @returns {Chart} - */ - _chart.columns = function (columns) { - if (!arguments.length) { - return _columns; - } - _columns = columns; - return _chart; - }; - - /** - * Get or set sort-by function. This function works as a value accessor at row level and returns a - * particular field to be sorted by. Default value: identity function - * @name sortBy - * @memberof dc.dataTable - * @instance - * @example - * chart.sortBy(function(d) { - * return d.date; - * }); - * @param {Function} [sortBy] - * @returns {Chart} - */ - _chart.sortBy = function (sortBy) { - if (!arguments.length) { - return _sortBy; - } - _sortBy = sortBy; - return _chart; - }; - - /** - * Get or set sort order. - * @name order - * @memberof dc.dataTable - * @instance - * @example - * chart.order(d3.descending); - * @param {Function} [order=d3.ascending] - * @returns {Chart} - */ - _chart.order = function (order) { - if (!arguments.length) { - return _order; - } - _order = order; - return _chart; - }; - - /** - * Get or set if group rows will be shown. - * - * The .group() getter-setter must be provided in either case. - * @name showGroups - * @memberof dc.dataTable - * @instance - * @example - * chart - * .group([value], [name]) - * .showGroups(true|false); - * @param {Boolean} [showGroups=true] - * @returns {Chart} - */ - _chart.showGroups = function (showGroups) { - if (!arguments.length) { - return _showGroups; - } - _showGroups = showGroups; - return _chart; - }; - - return _chart.anchor(parent, chartGroup); -}; - -/** - * Data grid is a simple widget designed to list the filtered records, providing - * a simple way to define how the items are displayed. - * - * Note: Unlike other charts, the data grid chart (and data table) use the group attribute as a keying function - * for [nesting](https://github.com/mbostock/d3/wiki/Arrays#-nest) the data together in groups. - * Do not pass in a crossfilter group as this will not work. - * - * Examples: - * - [List of members of the european parliament](http://europarl.me/dc.js/web/ep/index.html) - * @name dataGrid - * @memberof dc - * @mixes dc.baseMixin - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {DataGrid} - */ -dc.dataGrid = function (parent, chartGroup) { - var LABEL_CSS_CLASS = 'dc-grid-label'; - var ITEM_CSS_CLASS = 'dc-grid-item'; - var GROUP_CSS_CLASS = 'dc-grid-group'; - var GRID_CSS_CLASS = 'dc-grid-top'; - - var _chart = dc.baseMixin({}); - - var _size = 999; // shouldn't be needed, but you might - var _html = function (d) { return 'you need to provide an html() handling param: ' + JSON.stringify(d); }; - var _sortBy = function (d) { - return d; - }; - var _order = d3.ascending; - var _beginSlice = 0, _endSlice; - - var _htmlGroup = function (d) { - return '

' + - _chart.keyAccessor()(d) + '

'; - }; - - _chart._doRender = function () { - _chart.selectAll('div.' + GRID_CSS_CLASS).remove(); - - renderItems(renderGroups()); - - return _chart; - }; - - function renderGroups () { - var groups = _chart.root().selectAll('div.' + GRID_CSS_CLASS) - .data(nestEntries(), function (d) { - return _chart.keyAccessor()(d); - }); - - var itemGroup = groups - .enter() - .append('div') - .attr('class', GRID_CSS_CLASS); - - if (_htmlGroup) { - itemGroup - .html(function (d) { - return _htmlGroup(d); - }); - } - - groups.exit().remove(); - return itemGroup; - } - - function nestEntries () { - var entries = _chart.dimension().top(_size); - - return d3.nest() - .key(_chart.group()) - .sortKeys(_order) - .entries(entries.sort(function (a, b) { - return _order(_sortBy(a), _sortBy(b)); - }).slice(_beginSlice, _endSlice)); - } - - function renderItems (groups) { - var items = groups.order() - .selectAll('div.' + ITEM_CSS_CLASS) - .data(function (d) { - return d.values; - }); - - items.enter() - .append('div') - .attr('class', ITEM_CSS_CLASS) - .html(function (d) { - return _html(d); - }); - - items.exit().remove(); - - return items; - } - - _chart._doRedraw = function () { - return _chart._doRender(); - }; - - /** - * Get or set the index of the beginning slice which determines which entries get displayed by the widget. - * Useful when implementing pagination. - * @name beginSlice - * @memberof dc.dataGrid - * @instance - * @param {Number} [beginSlice=0] - * @returns {Chart} - */ - _chart.beginSlice = function (beginSlice) { - if (!arguments.length) { - return _beginSlice; - } - _beginSlice = beginSlice; - return _chart; - }; - - /** - * Get or set the index of the end slice which determines which entries get displayed by the widget - * Useful when implementing pagination. - * @name endSlice - * @memberof dc.dataGrid - * @instance - * @param {Number} [endSlice] - * @returns {Chart} - */ - _chart.endSlice = function (endSlice) { - if (!arguments.length) { - return _endSlice; - } - _endSlice = endSlice; - return _chart; - }; - - /** - * Get or set the grid size which determines the number of items displayed by the widget. - * @name size - * @memberof dc.dataGrid - * @instance - * @param {Number} [size=999] - * @returns {Chart} - */ - _chart.size = function (size) { - if (!arguments.length) { - return _size; - } - _size = size; - return _chart; - }; - - /** - * Get or set the function that formats an item. The data grid widget uses a - * function to generate dynamic html. Use your favourite templating engine or - * generate the string directly. - * @name html - * @memberof dc.dataGrid - * @instance - * @example - * chart.html(function (d) { return '
'+data.exampleString+'
';}); - * @param {Function} [html] - * @returns {Chart} - */ - _chart.html = function (html) { - if (!arguments.length) { - return _html; - } - _html = html; - return _chart; - }; - - /** - * Get or set the function that formats a group label. - * @name htmlGroup - * @memberof dc.dataGrid - * @instance - * @example - * chart.htmlGroup (function (d) { return '

'.d.key . 'with ' . d.values.length .' items

'}); - * @param {Function} [htmlGroup] - * @returns {Chart} - */ - _chart.htmlGroup = function (htmlGroup) { - if (!arguments.length) { - return _htmlGroup; - } - _htmlGroup = htmlGroup; - return _chart; - }; - - /** - * Get or set sort-by function. This function works as a value accessor at the item - * level and returns a particular field to be sorted. - * @name sortBy - * @memberof dc.dataGrid - * @instance - * @example - * chart.sortBy(function(d) { - * return d.date; - * }); - * @param {Function} [sortByFunction] - * @returns {Chart} - */ - _chart.sortBy = function (sortByFunction) { - if (!arguments.length) { - return _sortBy; - } - _sortBy = sortByFunction; - return _chart; - }; - - /** - * Get or set sort order function. - * @name order - * @memberof dc.dataGrid - * @instance - * @example - * chart.order(d3.descending); - * @param {Function} [order=d3.ascending] - * @returns {Chart} - */ - _chart.order = function (order) { - if (!arguments.length) { - return _order; - } - _order = order; - return _chart; - }; - - return _chart.anchor(parent, chartGroup); -}; - -/** - * A concrete implementation of a general purpose bubble chart that allows data visualization using the - * following dimensions: - * - x axis position - * - y axis position - * - bubble radius - * - color - * Examples: - * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/) - * - [US Venture Capital Landscape 2011](http://dc-js.github.com/dc.js/vc/index.html) - * @name bubbleChart - * @memberof dc - * @mixes dc.bubbleMixin - * @mixes dc.coordinateGridMixin - * @example - * // create a bubble chart under #chart-container1 element using the default global chart group - * var bubbleChart1 = dc.bubbleChart('#chart-container1'); - * // create a bubble chart under #chart-container2 element using chart group A - * var bubbleChart2 = dc.bubbleChart('#chart-container2', 'chartGroupA'); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {BubbleChart} - */ -dc.bubbleChart = function (parent, chartGroup) { - var _chart = dc.bubbleMixin(dc.coordinateGridMixin({})); - - var _elasticRadius = false; - - _chart.transitionDuration(750); - - var bubbleLocator = function (d) { - return 'translate(' + (bubbleX(d)) + ',' + (bubbleY(d)) + ')'; - }; - - /** - * Turn on or off the elastic bubble radius feature, or return the value of the flag. If this - * feature is turned on, then bubble radii will be automatically rescaled to fit the chart better. - * @name elasticRadius - * @memberof dc.bubbleChart - * @instance - * @param {Boolean} [elasticRadius=false] - * @returns {Boolean} - */ - _chart.elasticRadius = function (elasticRadius) { - if (!arguments.length) { - return _elasticRadius; - } - _elasticRadius = elasticRadius; - return _chart; - }; - - _chart.plotData = function () { - if (_elasticRadius) { - _chart.r().domain([_chart.rMin(), _chart.rMax()]); - } - - _chart.r().range([_chart.MIN_RADIUS, _chart.xAxisLength() * _chart.maxBubbleRelativeSize()]); - - var bubbleG = _chart.chartBodyG().selectAll('g.' + _chart.BUBBLE_NODE_CLASS) - .data(_chart.data(), function (d) { return d.key; }); - - renderNodes(bubbleG); - - updateNodes(bubbleG); - - removeNodes(bubbleG); - - _chart.fadeDeselectedArea(); - }; - - function renderNodes (bubbleG) { - var bubbleGEnter = bubbleG.enter().append('g'); - - bubbleGEnter - .attr('class', _chart.BUBBLE_NODE_CLASS) - .attr('transform', bubbleLocator) - .append('circle').attr('class', function (d, i) { - return _chart.BUBBLE_CLASS + ' _' + i; - }) - .on('click', _chart.onClick) - .attr('fill', _chart.getColor) - .attr('r', 0); - dc.transition(bubbleG, _chart.transitionDuration()) - .selectAll('circle.' + _chart.BUBBLE_CLASS) - .attr('r', function (d) { - return _chart.bubbleR(d); - }) - .attr('opacity', function (d) { - return (_chart.bubbleR(d) > 0) ? 1 : 0; - }); - - _chart._doRenderLabel(bubbleGEnter); - - _chart._doRenderTitles(bubbleGEnter); - } - - function updateNodes (bubbleG) { - dc.transition(bubbleG, _chart.transitionDuration()) - .attr('transform', bubbleLocator) - .selectAll('circle.' + _chart.BUBBLE_CLASS) - .attr('fill', _chart.getColor) - .attr('r', function (d) { - return _chart.bubbleR(d); - }) - .attr('opacity', function (d) { - return (_chart.bubbleR(d) > 0) ? 1 : 0; - }); - - _chart.doUpdateLabels(bubbleG); - _chart.doUpdateTitles(bubbleG); - } - - function removeNodes (bubbleG) { - bubbleG.exit().remove(); - } - - function bubbleX (d) { - var x = _chart.x()(_chart.keyAccessor()(d)); - if (isNaN(x)) { - x = 0; - } - return x; - } - - function bubbleY (d) { - var y = _chart.y()(_chart.valueAccessor()(d)); - if (isNaN(y)) { - y = 0; - } - return y; - } - - _chart.renderBrush = function () { - // override default x axis brush from parent chart - }; - - _chart.redrawBrush = function () { - // override default x axis brush from parent chart - _chart.fadeDeselectedArea(); - }; - - return _chart.anchor(parent, chartGroup); -}; - -/** - * Composite charts are a special kind of chart that render multiple charts on the same Coordinate - * Grid. You can overlay (compose) different bar/line/area charts in a single composite chart to - * achieve some quite flexible charting effects. - * @name compositeChart - * @memberof dc - * @mixes dc.coordinateGridMixin - * @example - * // create a composite chart under #chart-container1 element using the default global chart group - * var compositeChart1 = dc.compositeChart('#chart-container1'); - * // create a composite chart under #chart-container2 element using chart group A - * var compositeChart2 = dc.compositeChart('#chart-container2', 'chartGroupA'); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {CompositeChart} - */ -dc.compositeChart = function (parent, chartGroup) { - - var SUB_CHART_CLASS = 'sub'; - var DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING = 12; - - var _chart = dc.coordinateGridMixin({}); - var _children = []; - - var _childOptions = {}; - - var _shareColors = false, - _shareTitle = true; - - var _rightYAxis = d3.svg.axis(), - _rightYAxisLabel = 0, - _rightYAxisLabelPadding = DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING, - _rightY, - _rightAxisGridLines = false; - - _chart._mandatoryAttributes([]); - _chart.transitionDuration(500); - - dc.override(_chart, '_generateG', function () { - var g = this.__generateG(); - - for (var i = 0; i < _children.length; ++i) { - var child = _children[i]; - - generateChildG(child, i); - - if (!child.dimension()) { - child.dimension(_chart.dimension()); - } - if (!child.group()) { - child.group(_chart.group()); - } - - child.chartGroup(_chart.chartGroup()); - child.svg(_chart.svg()); - child.xUnits(_chart.xUnits()); - child.transitionDuration(_chart.transitionDuration()); - child.brushOn(_chart.brushOn()); - child.renderTitle(_chart.renderTitle()); - child.elasticX(_chart.elasticX()); - } - - return g; - }); - - _chart._brushing = function () { - var extent = _chart.extendBrush(); - var brushIsEmpty = _chart.brushIsEmpty(extent); - - for (var i = 0; i < _children.length; ++i) { - _children[i].filter(null); - if (!brushIsEmpty) { - _children[i].filter(extent); - } - } - }; - - _chart._prepareYAxis = function () { - if (leftYAxisChildren().length !== 0) { prepareLeftYAxis(); } - if (rightYAxisChildren().length !== 0) { prepareRightYAxis(); } - - if (leftYAxisChildren().length > 0 && !_rightAxisGridLines) { - _chart._renderHorizontalGridLinesForAxis(_chart.g(), _chart.y(), _chart.yAxis()); - } else if (rightYAxisChildren().length > 0) { - _chart._renderHorizontalGridLinesForAxis(_chart.g(), _rightY, _rightYAxis); - } - }; - - _chart.renderYAxis = function () { - if (leftYAxisChildren().length !== 0) { - _chart.renderYAxisAt('y', _chart.yAxis(), _chart.margins().left); - _chart.renderYAxisLabel('y', _chart.yAxisLabel(), -90); - } - - if (rightYAxisChildren().length !== 0) { - _chart.renderYAxisAt('yr', _chart.rightYAxis(), _chart.width() - _chart.margins().right); - _chart.renderYAxisLabel('yr', _chart.rightYAxisLabel(), 90, _chart.width() - _rightYAxisLabelPadding); - } - }; - - function prepareRightYAxis () { - if (_chart.rightY() === undefined || _chart.elasticY()) { - if (_chart.rightY() === undefined) { - _chart.rightY(d3.scale.linear()); - } - _chart.rightY().domain([rightYAxisMin(), rightYAxisMax()]).rangeRound([_chart.yAxisHeight(), 0]); - } - - _chart.rightY().range([_chart.yAxisHeight(), 0]); - _chart.rightYAxis(_chart.rightYAxis().scale(_chart.rightY())); - - _chart.rightYAxis().orient('right'); - } - - function prepareLeftYAxis () { - if (_chart.y() === undefined || _chart.elasticY()) { - if (_chart.y() === undefined) { - _chart.y(d3.scale.linear()); - } - _chart.y().domain([yAxisMin(), yAxisMax()]).rangeRound([_chart.yAxisHeight(), 0]); - } - - _chart.y().range([_chart.yAxisHeight(), 0]); - _chart.yAxis(_chart.yAxis().scale(_chart.y())); - - _chart.yAxis().orient('left'); - } - - function generateChildG (child, i) { - child._generateG(_chart.g()); - child.g().attr('class', SUB_CHART_CLASS + ' _' + i); - } - - _chart.plotData = function () { - for (var i = 0; i < _children.length; ++i) { - var child = _children[i]; - - if (!child.g()) { - generateChildG(child, i); - } - - if (_shareColors) { - child.colors(_chart.colors()); - } - - child.x(_chart.x()); - - child.xAxis(_chart.xAxis()); - - if (child.useRightYAxis()) { - child.y(_chart.rightY()); - child.yAxis(_chart.rightYAxis()); - } else { - child.y(_chart.y()); - child.yAxis(_chart.yAxis()); - } - - child.plotData(); - - child._activateRenderlets(); - } - }; - - /** - * Get or set whether to draw gridlines from the right y axis. Drawing from the left y axis is the - * default behavior. This option is only respected when subcharts with both left and right y-axes - * are present. - * @name useRightAxisGridLines - * @memberof dc.compositeChart - * @instance - * @param {Boolean} [useRightAxisGridLines=false] - * @return {Chart} - */ - _chart.useRightAxisGridLines = function (useRightAxisGridLines) { - if (!arguments) { - return _rightAxisGridLines; - } - - _rightAxisGridLines = useRightAxisGridLines; - return _chart; - }; - - /** - * Get or set chart-specific options for all child charts. This is equivalent to calling `.options` - * on each child chart. - * @name childOptions - * @memberof dc.compositeChart - * @instance - * @param {Object} [childOptions] - * @return {Chart} - */ - _chart.childOptions = function (childOptions) { - if (!arguments.length) { - return _childOptions; - } - _childOptions = childOptions; - _children.forEach(function (child) { - child.options(_childOptions); - }); - return _chart; - }; - - _chart.fadeDeselectedArea = function () { - for (var i = 0; i < _children.length; ++i) { - var child = _children[i]; - child.brush(_chart.brush()); - child.fadeDeselectedArea(); - } - }; - - /** - * Set or get the right y axis label. - * @name rightYAxisLabel - * @memberof dc.compositeChart - * @instance - * @param {String} [rightYAxisLabel] - * @param {Number} [padding] - * @return {Chart} - */ - _chart.rightYAxisLabel = function (rightYAxisLabel, padding) { - if (!arguments.length) { - return _rightYAxisLabel; - } - _rightYAxisLabel = rightYAxisLabel; - _chart.margins().right -= _rightYAxisLabelPadding; - _rightYAxisLabelPadding = (padding === undefined) ? DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING : padding; - _chart.margins().right += _rightYAxisLabelPadding; - return _chart; - }; - - /** - * Combine the given charts into one single composite coordinate grid chart. - * @name compose - * @memberof dc.compositeChart - * @instance - * @example - * moveChart.compose([ - * // when creating sub-chart you need to pass in the parent chart - * dc.lineChart(moveChart) - * .group(indexAvgByMonthGroup) // if group is missing then parent's group will be used - * .valueAccessor(function (d){return d.value.avg;}) - * // most of the normal functions will continue to work in a composed chart - * .renderArea(true) - * .stack(monthlyMoveGroup, function (d){return d.value;}) - * .title(function (d){ - * var value = d.value.avg?d.value.avg:d.value; - * if(isNaN(value)) value = 0; - * return dateFormat(d.key) + '\n' + numberFormat(value); - * }), - * dc.barChart(moveChart) - * .group(volumeByMonthGroup) - * .centerBar(true) - * ]); - * @param {Array} [subChartArray] - * @return {Chart} - */ - _chart.compose = function (subChartArray) { - _children = subChartArray; - _children.forEach(function (child) { - child.height(_chart.height()); - child.width(_chart.width()); - child.margins(_chart.margins()); - - if (_shareTitle) { - child.title(_chart.title()); - } - - child.options(_childOptions); - }); - return _chart; - }; - - /** - * Returns the child charts which are composed into the composite chart. - * @name children - * @memberof dc.compositeChart - * @instance - * @return {Array} - */ - _chart.children = function () { - return _children; - }; - - /** - * Get or set color sharing for the chart. If set, the `.colors()` value from this chart - * will be shared with composed children. Additionally if the child chart implements - * Stackable and has not set a custom .colorAccessor, then it will generate a color - * specific to its order in the composition. - * @name shareColors - * @memberof dc.compositeChart - * @instance - * @param {Boolean} [shareColors=false] - * @return {Chart} - */ - _chart.shareColors = function (shareColors) { - if (!arguments.length) { - return _shareColors; - } - _shareColors = shareColors; - return _chart; - }; - - /** - * Get or set title sharing for the chart. If set, the `.title()` value from this chart will be - * shared with composed children. - * @name shareTitle - * @memberof dc.compositeChart - * @instance - * @param {Boolean} [shareTitle=true] - * @return {Chart} - */ - _chart.shareTitle = function (shareTitle) { - if (!arguments.length) { - return _shareTitle; - } - _shareTitle = shareTitle; - return _chart; - }; - - /** - * Get or set the y scale for the right axis. The right y scale is typically automatically - * generated by the chart implementation. - * @name rightY - * @memberof dc.compositeChart - * @instance - * @param {d3.scale} [yScale] - * @return {Chart} - */ - _chart.rightY = function (yScale) { - if (!arguments.length) { - return _rightY; - } - _rightY = yScale; - _chart.rescale(); - return _chart; - }; - - function leftYAxisChildren () { - return _children.filter(function (child) { - return !child.useRightYAxis(); - }); - } - - function rightYAxisChildren () { - return _children.filter(function (child) { - return child.useRightYAxis(); - }); - } - - function getYAxisMin (charts) { - return charts.map(function (c) { - return c.yAxisMin(); - }); - } - - delete _chart.yAxisMin; - function yAxisMin () { - return d3.min(getYAxisMin(leftYAxisChildren())); - } - - function rightYAxisMin () { - return d3.min(getYAxisMin(rightYAxisChildren())); - } - - function getYAxisMax (charts) { - return charts.map(function (c) { - return c.yAxisMax(); - }); - } - - delete _chart.yAxisMax; - function yAxisMax () { - return dc.utils.add(d3.max(getYAxisMax(leftYAxisChildren())), _chart.yAxisPadding()); - } - - function rightYAxisMax () { - return dc.utils.add(d3.max(getYAxisMax(rightYAxisChildren())), _chart.yAxisPadding()); - } - - function getAllXAxisMinFromChildCharts () { - return _children.map(function (c) { - return c.xAxisMin(); - }); - } - - dc.override(_chart, 'xAxisMin', function () { - return dc.utils.subtract(d3.min(getAllXAxisMinFromChildCharts()), _chart.xAxisPadding()); - }); - - function getAllXAxisMaxFromChildCharts () { - return _children.map(function (c) { - return c.xAxisMax(); - }); - } - - dc.override(_chart, 'xAxisMax', function () { - return dc.utils.add(d3.max(getAllXAxisMaxFromChildCharts()), _chart.xAxisPadding()); - }); - - _chart.legendables = function () { - return _children.reduce(function (items, child) { - if (_shareColors) { - child.colors(_chart.colors()); - } - items.push.apply(items, child.legendables()); - return items; - }, []); - }; - - _chart.legendHighlight = function (d) { - for (var j = 0; j < _children.length; ++j) { - var child = _children[j]; - child.legendHighlight(d); - } - }; - - _chart.legendReset = function (d) { - for (var j = 0; j < _children.length; ++j) { - var child = _children[j]; - child.legendReset(d); - } - }; - - _chart.legendToggle = function () { - console.log('composite should not be getting legendToggle itself'); - }; - - /** - * Set or get the right y axis used by the composite chart. This function is most useful when y - * axis customization is required. The y axis in dc.js is an instance of a [d3 axis - * object](https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-_axis) therefore it supports any valid - * d3 axis manipulation. **Caution**: The y axis is usually generated internally by dc; - * resetting it may cause unexpected results. - * @name rightYAxis - * @memberof dc.compositeChart - * @instance - * @example - * // customize y axis tick format - * chart.rightYAxis().tickFormat(function (v) {return v + '%';}); - * // customize y axis tick values - * chart.rightYAxis().tickValues([0, 100, 200, 300]); - * @param {d3.svg.axis} [rightYAxis] - * @return {Chart} - */ - _chart.rightYAxis = function (rightYAxis) { - if (!arguments.length) { - return _rightYAxis; - } - _rightYAxis = rightYAxis; - return _chart; - }; - - return _chart.anchor(parent, chartGroup); -}; - -/** - * A series chart is a chart that shows multiple series of data overlaid on one chart, where the - * series is specified in the data. It is a specialization of Composite Chart and inherits all - * composite features other than recomposing the chart. - * @name seriesChart - * @memberof dc - * @mixes dc.compositeChart - * @example - * // create a series chart under #chart-container1 element using the default global chart group - * var seriesChart1 = dc.seriesChart("#chart-container1"); - * // create a series chart under #chart-container2 element using chart group A - * var seriesChart2 = dc.seriesChart("#chart-container2", "chartGroupA"); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {SeriesChart} - */ -dc.seriesChart = function (parent, chartGroup) { - var _chart = dc.compositeChart(parent, chartGroup); - - function keySort (a, b) { - return d3.ascending(_chart.keyAccessor()(a), _chart.keyAccessor()(b)); - } - - var _charts = {}; - var _chartFunction = dc.lineChart; - var _seriesAccessor; - var _seriesSort = d3.ascending; - var _valueSort = keySort; - - _chart._mandatoryAttributes().push('seriesAccessor', 'chart'); - _chart.shareColors(true); - - _chart._preprocessData = function () { - var keep = []; - var childrenChanged; - var nester = d3.nest().key(_seriesAccessor); - if (_seriesSort) { - nester.sortKeys(_seriesSort); - } - if (_valueSort) { - nester.sortValues(_valueSort); - } - var nesting = nester.entries(_chart.data()); - var children = - nesting.map(function (sub, i) { - var subChart = _charts[sub.key] || _chartFunction.call(_chart, _chart, chartGroup, sub.key, i); - if (!_charts[sub.key]) { - childrenChanged = true; - } - _charts[sub.key] = subChart; - keep.push(sub.key); - return subChart - .dimension(_chart.dimension()) - .group({all: d3.functor(sub.values)}, sub.key) - .keyAccessor(_chart.keyAccessor()) - .valueAccessor(_chart.valueAccessor()) - .brushOn(_chart.brushOn()); - }); - // this works around the fact compositeChart doesn't really - // have a removal interface - Object.keys(_charts) - .filter(function (c) {return keep.indexOf(c) === -1;}) - .forEach(function (c) { - clearChart(c); - childrenChanged = true; - }); - _chart._compose(children); - if (childrenChanged && _chart.legend()) { - _chart.legend().render(); - } - }; - - function clearChart (c) { - if (_charts[c].g()) { - _charts[c].g().remove(); - } - delete _charts[c]; - } - - function resetChildren () { - Object.keys(_charts).map(clearChart); - _charts = {}; - } - - /** - * Get or set the chart function, which generates the child charts. - * @name chart - * @memberof dc.seriesChart - * @instance - * @example - * // put interpolation on the line charts used for the series - * chart.chart(function(c) { return dc.lineChart(c).interpolate('basis'); }) - * // do a scatter series chart - * chart.chart(dc.scatterPlot) - * @param {Function} [chartFunction=dc.lineChart] - * @returns {Chart} - */ - _chart.chart = function (chartFunction) { - if (!arguments.length) { - return _chartFunction; - } - _chartFunction = chartFunction; - resetChildren(); - return _chart; - }; - - /** - * Get or set accessor function for the displayed series. Given a datum, this function - * should return the series that datum belongs to. - * @name seriesAccessor - * @memberof dc.seriesChart - * @instance - * @param {Function} [accessor] - * @returns {Chart} - */ - _chart.seriesAccessor = function (accessor) { - if (!arguments.length) { - return _seriesAccessor; - } - _seriesAccessor = accessor; - resetChildren(); - return _chart; - }; - - /** - * Get or set a function to sort the list of series by, given series values. - * @name seriesSort - * @memberof dc.seriesChart - * @instance - * @example - * chart.seriesSort(d3.descending); - * @param {Function} [sortFunction=d3.ascending] - * @returns {Chart} - */ - _chart.seriesSort = function (sortFunction) { - if (!arguments.length) { - return _seriesSort; - } - _seriesSort = sortFunction; - resetChildren(); - return _chart; - }; - - /** - * Get or set a function to sort each series values by. By default this is the key accessor which, - * for example, will ensure a lineChart series connects its points in increasing key/x order, - * rather than haphazardly. - * @name valueSort - * @memberof dc.seriesChart - * @instance - * @param {Function} [sortFunction] - * @returns {Chart} - */ - _chart.valueSort = function (sortFunction) { - if (!arguments.length) { - return _valueSort; - } - _valueSort = sortFunction; - resetChildren(); - return _chart; - }; - - // make compose private - _chart._compose = _chart.compose; - delete _chart.compose; - - return _chart; -}; - -/** - * The geo choropleth chart is designed as an easy way to create a crossfilter driven choropleth map - * from GeoJson data. This chart implementation was inspired by [the great d3 choropleth example](http://bl.ocks.org/4060606). - * Examples: - * - [US Venture Capital Landscape 2011](http://dc-js.github.com/dc.js/vc/index.html) - * @name geoChoroplethChart - * @memberof dc - * @mixes dc.colorMixin - * @mixes dc.baseMixin - * @example - * // create a choropleth chart under '#us-chart' element using the default global chart group - * var chart1 = dc.geoChoroplethChart('#us-chart'); - * // create a choropleth chart under '#us-chart2' element using chart group A - * var chart2 = dc.compositeChart('#us-chart2', 'chartGroupA'); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {GeoChoroplethChart} - */ -dc.geoChoroplethChart = function (parent, chartGroup) { - var _chart = dc.colorMixin(dc.baseMixin({})); - - _chart.colorAccessor(function (d) { - return d || 0; - }); - - var _geoPath = d3.geo.path(); - var _projectionFlag; - - var _geoJsons = []; - - _chart._doRender = function () { - _chart.resetSvg(); - for (var layerIndex = 0; layerIndex < _geoJsons.length; ++layerIndex) { - var states = _chart.svg().append('g') - .attr('class', 'layer' + layerIndex); - - var regionG = states.selectAll('g.' + geoJson(layerIndex).name) - .data(geoJson(layerIndex).data) - .enter() - .append('g') - .attr('class', geoJson(layerIndex).name); - - regionG - .append('path') - .attr('fill', 'white') - .attr('d', _geoPath); - - regionG.append('title'); - - plotData(layerIndex); - } - _projectionFlag = false; - }; - - function plotData (layerIndex) { - var data = generateLayeredData(); - - if (isDataLayer(layerIndex)) { - var regionG = renderRegionG(layerIndex); - - renderPaths(regionG, layerIndex, data); - - renderTitle(regionG, layerIndex, data); - } - } - - function generateLayeredData () { - var data = {}; - var groupAll = _chart.data(); - for (var i = 0; i < groupAll.length; ++i) { - data[_chart.keyAccessor()(groupAll[i])] = _chart.valueAccessor()(groupAll[i]); - } - return data; - } - - function isDataLayer (layerIndex) { - return geoJson(layerIndex).keyAccessor; - } - - function renderRegionG (layerIndex) { - var regionG = _chart.svg() - .selectAll(layerSelector(layerIndex)) - .classed('selected', function (d) { - return isSelected(layerIndex, d); - }) - .classed('deselected', function (d) { - return isDeselected(layerIndex, d); - }) - .attr('class', function (d) { - var layerNameClass = geoJson(layerIndex).name; - var regionClass = dc.utils.nameToId(geoJson(layerIndex).keyAccessor(d)); - var baseClasses = layerNameClass + ' ' + regionClass; - if (isSelected(layerIndex, d)) { - baseClasses += ' selected'; - } - if (isDeselected(layerIndex, d)) { - baseClasses += ' deselected'; - } - return baseClasses; - }); - return regionG; - } - - function layerSelector (layerIndex) { - return 'g.layer' + layerIndex + ' g.' + geoJson(layerIndex).name; - } - - function isSelected (layerIndex, d) { - return _chart.hasFilter() && _chart.hasFilter(getKey(layerIndex, d)); - } - - function isDeselected (layerIndex, d) { - return _chart.hasFilter() && !_chart.hasFilter(getKey(layerIndex, d)); - } - - function getKey (layerIndex, d) { - return geoJson(layerIndex).keyAccessor(d); - } - - function geoJson (index) { - return _geoJsons[index]; - } - - function renderPaths (regionG, layerIndex, data) { - var paths = regionG - .select('path') - .attr('fill', function () { - var currentFill = d3.select(this).attr('fill'); - if (currentFill) { - return currentFill; - } - return 'none'; - }) - .on('click', function (d) { - return _chart.onClick(d, layerIndex); - }); - - dc.transition(paths, _chart.transitionDuration()).attr('fill', function (d, i) { - return _chart.getColor(data[geoJson(layerIndex).keyAccessor(d)], i); - }); - } - - _chart.onClick = function (d, layerIndex) { - var selectedRegion = geoJson(layerIndex).keyAccessor(d); - dc.events.trigger(function () { - _chart.filter(selectedRegion); - _chart.redrawGroup(); - }); - }; - - function renderTitle (regionG, layerIndex, data) { - if (_chart.renderTitle()) { - regionG.selectAll('title').text(function (d) { - var key = getKey(layerIndex, d); - var value = data[key]; - return _chart.title()({key: key, value: value}); - }); - } - } - - _chart._doRedraw = function () { - for (var layerIndex = 0; layerIndex < _geoJsons.length; ++layerIndex) { - plotData(layerIndex); - if (_projectionFlag) { - _chart.svg().selectAll('g.' + geoJson(layerIndex).name + ' path').attr('d', _geoPath); - } - } - _projectionFlag = false; - }; - - /** - * **mandatory** - * - * Use this function to insert a new GeoJson map layer. This function can be invoked multiple times - * if you have multiple GeoJson data layers to render on top of each other. If you overlay multiple - * layers with the same name the new overlay will override the existing one. - * @name overlayGeoJson - * @memberof dc.geoChoroplethChart - * @instance - * @example - * // insert a layer for rendering US states - * chart.overlayGeoJson(statesJson.features, 'state', function(d) { - * return d.properties.name; - * }); - * @param {Object} json - a geojson feed - * @param {String} name - name of the layer - * @param {Function} keyAccessor - accessor function used to extract 'key' from the GeoJson data. The key extracted by - * this function should match the keys returned by the crossfilter groups. - * @returns {Chart} - */ - _chart.overlayGeoJson = function (json, name, keyAccessor) { - for (var i = 0; i < _geoJsons.length; ++i) { - if (_geoJsons[i].name === name) { - _geoJsons[i].data = json; - _geoJsons[i].keyAccessor = keyAccessor; - return _chart; - } - } - _geoJsons.push({name: name, data: json, keyAccessor: keyAccessor}); - return _chart; - }; - - /** - * Set custom geo projection function. See the available [d3 geo projection - * functions](https://github.com/mbostock/d3/wiki/Geo-Projections). - * @name projection - * @memberof dc.geoChoroplethChart - * @instance - * @param {d3.projection} [projection=d3.projection.albersUsa()] - * @returns {Chart} - */ - _chart.projection = function (projection) { - _geoPath.projection(projection); - _projectionFlag = true; - return _chart; - }; - - /** - * Returns all GeoJson layers currently registered with this chart. The returned array is a - * reference to this chart's internal data structure, so any modification to this array will also - * modify this chart's internal registration. - * @name geoJsons - * @memberof dc.geoChoroplethChart - * @instance - * @returns {Array<{name:String, data: Object, accessor: Function}>} - */ - _chart.geoJsons = function () { - return _geoJsons; - }; - - /** - * Returns the [d3.geo.path](https://github.com/mbostock/d3/wiki/Geo-Paths#path) object used to - * render the projection and features. Can be useful for figuring out the bounding box of the - * feature set and thus a way to calculate scale and translation for the projection. - * @name geoPath - * @memberof dc.geoChoroplethChart - * @instance - * @returns {d3.geo.path} - */ - _chart.geoPath = function () { - return _geoPath; - }; - - /** - * Remove a GeoJson layer from this chart by name - * @name removeGeoJson - * @memberof dc.geoChoroplethChart - * @instance - * @param {String} name - * @returns {Chart} - */ - _chart.removeGeoJson = function (name) { - var geoJsons = []; - - for (var i = 0; i < _geoJsons.length; ++i) { - var layer = _geoJsons[i]; - if (layer.name !== name) { - geoJsons.push(layer); - } - } - - _geoJsons = geoJsons; - - return _chart; - }; - - return _chart.anchor(parent, chartGroup); -}; - -/** - * The bubble overlay chart is quite different from the typical bubble chart. With the bubble overlay - * chart you can arbitrarily place bubbles on an existing svg or bitmap image, thus changing the - * typical x and y positioning while retaining the capability to visualize data using bubble radius - * and coloring. - * Examples: - * - [Canadian City Crime Stats](http://dc-js.github.com/dc.js/crime/index.html) - * @name bubbleOverlay - * @memberof dc - * @mixes dc.bubbleMixin - * @mixes dc.baseMixin - * @example - * // create a bubble overlay chart on top of the '#chart-container1 svg' element using the default global chart group - * var bubbleChart1 = dc.bubbleOverlayChart('#chart-container1').svg(d3.select('#chart-container1 svg')); - * // create a bubble overlay chart on top of the '#chart-container2 svg' element using chart group A - * var bubbleChart2 = dc.compositeChart('#chart-container2', 'chartGroupA').svg(d3.select('#chart-container2 svg')); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {BubbleOverlay} - */ -dc.bubbleOverlay = function (parent, chartGroup) { - var BUBBLE_OVERLAY_CLASS = 'bubble-overlay'; - var BUBBLE_NODE_CLASS = 'node'; - var BUBBLE_CLASS = 'bubble'; - - /** - * **mandatory** - * - * Set the underlying svg image element. Unlike other dc charts this chart will not generate a svg - * element; therefore the bubble overlay chart will not work if this function is not invoked. If the - * underlying image is a bitmap, then an empty svg will need to be created on top of the image. - * @name svg - * @memberof dc.bubbleOverlay - * @instance - * @example - * // set up underlying svg element - * chart.svg(d3.select('#chart svg')); - * @param {Selection} [imageElement] - * @returns {Chart} - */ - var _chart = dc.bubbleMixin(dc.baseMixin({})); - var _g; - var _points = []; - - _chart.transitionDuration(750); - - _chart.radiusValueAccessor(function (d) { - return d.value; - }); - - /** - * **mandatory** - * - * Set up a data point on the overlay. The name of a data point should match a specific 'key' among - * data groups generated using keyAccessor. If a match is found (point name <-> data group key) - * then a bubble will be generated at the position specified by the function. x and y - * value specified here are relative to the underlying svg. - * @name point - * @memberof dc.bubbleOverlay - * @instance - * @param {String} name - * @param {Number} x - * @param {Number} y - * @returns {Chart} - */ - _chart.point = function (name, x, y) { - _points.push({name: name, x: x, y: y}); - return _chart; - }; - - _chart._doRender = function () { - _g = initOverlayG(); - - _chart.r().range([_chart.MIN_RADIUS, _chart.width() * _chart.maxBubbleRelativeSize()]); - - initializeBubbles(); - - _chart.fadeDeselectedArea(); - - return _chart; - }; - - function initOverlayG () { - _g = _chart.select('g.' + BUBBLE_OVERLAY_CLASS); - if (_g.empty()) { - _g = _chart.svg().append('g').attr('class', BUBBLE_OVERLAY_CLASS); - } - return _g; - } - - function initializeBubbles () { - var data = mapData(); - - _points.forEach(function (point) { - var nodeG = getNodeG(point, data); - - var circle = nodeG.select('circle.' + BUBBLE_CLASS); - - if (circle.empty()) { - circle = nodeG.append('circle') - .attr('class', BUBBLE_CLASS) - .attr('r', 0) - .attr('fill', _chart.getColor) - .on('click', _chart.onClick); - } - - dc.transition(circle, _chart.transitionDuration()) - .attr('r', function (d) { - return _chart.bubbleR(d); - }); - - _chart._doRenderLabel(nodeG); - - _chart._doRenderTitles(nodeG); - }); - } - - function mapData () { - var data = {}; - _chart.data().forEach(function (datum) { - data[_chart.keyAccessor()(datum)] = datum; - }); - return data; - } - - function getNodeG (point, data) { - var bubbleNodeClass = BUBBLE_NODE_CLASS + ' ' + dc.utils.nameToId(point.name); - - var nodeG = _g.select('g.' + dc.utils.nameToId(point.name)); - - if (nodeG.empty()) { - nodeG = _g.append('g') - .attr('class', bubbleNodeClass) - .attr('transform', 'translate(' + point.x + ',' + point.y + ')'); - } - - nodeG.datum(data[point.name]); - - return nodeG; - } - - _chart._doRedraw = function () { - updateBubbles(); - - _chart.fadeDeselectedArea(); - - return _chart; - }; - - function updateBubbles () { - var data = mapData(); - - _points.forEach(function (point) { - var nodeG = getNodeG(point, data); - - var circle = nodeG.select('circle.' + BUBBLE_CLASS); - - dc.transition(circle, _chart.transitionDuration()) - .attr('r', function (d) { - return _chart.bubbleR(d); - }) - .attr('fill', _chart.getColor); - - _chart.doUpdateLabels(nodeG); - - _chart.doUpdateTitles(nodeG); - }); - } - - _chart.debug = function (flag) { - if (flag) { - var debugG = _chart.select('g.' + dc.constants.DEBUG_GROUP_CLASS); - - if (debugG.empty()) { - debugG = _chart.svg() - .append('g') - .attr('class', dc.constants.DEBUG_GROUP_CLASS); - } - - var debugText = debugG.append('text') - .attr('x', 10) - .attr('y', 20); - - debugG - .append('rect') - .attr('width', _chart.width()) - .attr('height', _chart.height()) - .on('mousemove', function () { - var position = d3.mouse(debugG.node()); - var msg = position[0] + ', ' + position[1]; - debugText.text(msg); - }); - } else { - _chart.selectAll('.debug').remove(); - } - - return _chart; - }; - - _chart.anchor(parent, chartGroup); - - return _chart; -}; - -/** - * Concrete row chart implementation. - * @name rowChart - * @memberof dc - * @mixes dc.capMixin - * @mixes dc.marginMixin - * @mixes dc.colorMixin - * @mixes dc.baseMixin - * @example - * // create a row chart under #chart-container1 element using the default global chart group - * var chart1 = dc.rowChart('#chart-container1'); - * // create a row chart under #chart-container2 element using chart group A - * var chart2 = dc.rowChart('#chart-container2', 'chartGroupA'); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {RowChart} - */ -dc.rowChart = function (parent, chartGroup) { - - var _g; - - var _labelOffsetX = 10; - var _labelOffsetY = 15; - var _hasLabelOffsetY = false; - var _dyOffset = '0.35em'; // this helps center labels https://github.com/mbostock/d3/wiki/SVG-Shapes#svg_text - var _titleLabelOffsetX = 2; - - var _gap = 5; - - var _fixedBarHeight = false; - var _rowCssClass = 'row'; - var _titleRowCssClass = 'titlerow'; - var _renderTitleLabel = false; - - var _chart = dc.capMixin(dc.marginMixin(dc.colorMixin(dc.baseMixin({})))); - - var _x; - - var _elasticX; - - var _xAxis = d3.svg.axis().orient('bottom'); - - var _rowData; - - _chart.rowsCap = _chart.cap; - - function calculateAxisScale () { - if (!_x || _elasticX) { - var extent = d3.extent(_rowData, _chart.cappedValueAccessor); - if (extent[0] > 0) { - extent[0] = 0; - } - _x = d3.scale.linear().domain(extent) - .range([0, _chart.effectiveWidth()]); - } - _xAxis.scale(_x); - } - - function drawAxis () { - var axisG = _g.select('g.axis'); - - calculateAxisScale(); - - if (axisG.empty()) { - axisG = _g.append('g').attr('class', 'axis'); - } - axisG.attr('transform', 'translate(0, ' + _chart.effectiveHeight() + ')'); - - dc.transition(axisG, _chart.transitionDuration()) - .call(_xAxis); - } - - _chart._doRender = function () { - _chart.resetSvg(); - - _g = _chart.svg() - .append('g') - .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')'); - - drawChart(); - - return _chart; - }; - - _chart.title(function (d) { - return _chart.cappedKeyAccessor(d) + ': ' + _chart.cappedValueAccessor(d); - }); - - _chart.label(_chart.cappedKeyAccessor); - - /** - * Gets or sets the x scale. The x scale can be any d3 - * [quantitive scale](https://github.com/mbostock/d3/wiki/Quantitative-Scales) - * @name x - * @memberof dc.rowChart - * @instance - * @param {d3.scale} [scale] - * @returns {Chart} - */ - _chart.x = function (scale) { - if (!arguments.length) { - return _x; - } - _x = scale; - return _chart; - }; - - function drawGridLines () { - _g.selectAll('g.tick') - .select('line.grid-line') - .remove(); - - _g.selectAll('g.tick') - .append('line') - .attr('class', 'grid-line') - .attr('x1', 0) - .attr('y1', 0) - .attr('x2', 0) - .attr('y2', function () { - return -_chart.effectiveHeight(); - }); - } - - function drawChart () { - _rowData = _chart.data(); - - drawAxis(); - drawGridLines(); - - var rows = _g.selectAll('g.' + _rowCssClass) - .data(_rowData); - - createElements(rows); - removeElements(rows); - updateElements(rows); - } - - function createElements (rows) { - var rowEnter = rows.enter() - .append('g') - .attr('class', function (d, i) { - return _rowCssClass + ' _' + i; - }); - - rowEnter.append('rect').attr('width', 0); - - createLabels(rowEnter); - updateLabels(rows); - } - - function removeElements (rows) { - rows.exit().remove(); - } - - function rootValue () { - var root = _x(0); - return (root === -Infinity || root !== root) ? _x(1) : root; - } - - function updateElements (rows) { - var n = _rowData.length; - - var height; - if (!_fixedBarHeight) { - height = (_chart.effectiveHeight() - (n + 1) * _gap) / n; - } else { - height = _fixedBarHeight; - } - - // vertically align label in center unless they override the value via property setter - if (!_hasLabelOffsetY) { - _labelOffsetY = height / 2; - } - - var rect = rows.attr('transform', function (d, i) { - return 'translate(0,' + ((i + 1) * _gap + i * height) + ')'; - }).select('rect') - .attr('height', height) - .attr('fill', _chart.getColor) - .on('click', onClick) - .classed('deselected', function (d) { - return (_chart.hasFilter()) ? !isSelectedRow(d) : false; - }) - .classed('selected', function (d) { - return (_chart.hasFilter()) ? isSelectedRow(d) : false; - }); - - dc.transition(rect, _chart.transitionDuration()) - .attr('width', function (d) { - return Math.abs(rootValue() - _x(_chart.valueAccessor()(d))); - }) - .attr('transform', translateX); - - createTitles(rows); - updateLabels(rows); - } - - function createTitles (rows) { - if (_chart.renderTitle()) { - rows.selectAll('title').remove(); - rows.append('title').text(_chart.title()); - } - } - - function createLabels (rowEnter) { - if (_chart.renderLabel()) { - rowEnter.append('text') - .on('click', onClick); - } - if (_chart.renderTitleLabel()) { - rowEnter.append('text') - .attr('class', _titleRowCssClass) - .on('click', onClick); - } - } - - function updateLabels (rows) { - if (_chart.renderLabel()) { - var lab = rows.select('text') - .attr('x', _labelOffsetX) - .attr('y', _labelOffsetY) - .attr('dy', _dyOffset) - .on('click', onClick) - .attr('class', function (d, i) { - return _rowCssClass + ' _' + i; - }) - .text(function (d) { - return _chart.label()(d); - }); - dc.transition(lab, _chart.transitionDuration()) - .attr('transform', translateX); - } - if (_chart.renderTitleLabel()) { - var titlelab = rows.select('.' + _titleRowCssClass) - .attr('x', _chart.effectiveWidth() - _titleLabelOffsetX) - .attr('y', _labelOffsetY) - .attr('text-anchor', 'end') - .on('click', onClick) - .attr('class', function (d, i) { - return _titleRowCssClass + ' _' + i ; - }) - .text(function (d) { - return _chart.title()(d); - }); - dc.transition(titlelab, _chart.transitionDuration()) - .attr('transform', translateX); - } - } - - /** - * Turn on/off Title label rendering (values) using SVG style of text-anchor 'end' - * @name renderTitleLabel - * @memberof dc.rowChart - * @instance - * @param {Boolean} [renderTitleLabel=false] - * @returns {Chart} - */ - _chart.renderTitleLabel = function (renderTitleLabel) { - if (!arguments.length) { - return _renderTitleLabel; - } - _renderTitleLabel = renderTitleLabel; - return _chart; - }; - - function onClick (d) { - _chart.onClick(d); - } - - function translateX (d) { - var x = _x(_chart.cappedValueAccessor(d)), - x0 = rootValue(), - s = x > x0 ? x0 : x; - return 'translate(' + s + ',0)'; - } - - _chart._doRedraw = function () { - drawChart(); - return _chart; - }; - - /** - * Get the x axis for the row chart instance. Note: not settable for row charts. - * See the [d3 axis object](https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-axis) documention for more information. - * @name xAxis - * @memberof dc.rowChart - * @instance - * @example - * // customize x axis tick format - * chart.xAxis().tickFormat(function (v) {return v + '%';}); - * // customize x axis tick values - * chart.xAxis().tickValues([0, 100, 200, 300]); - * @returns {d3.svg.Axis} - */ - _chart.xAxis = function () { - return _xAxis; - }; - - /** - * Get or set the fixed bar height. Default is [false] which will auto-scale bars. - * For example, if you want to fix the height for a specific number of bars (useful in TopN charts) - * you could fix height as follows (where count = total number of bars in your TopN and gap is - * your vertical gap space). - * @name fixedBarHeight - * @memberof dc.rowChart - * @instance - * @example - * chart.fixedBarHeight( chartheight - (count + 1) * gap / count); - * @param {Boolean|Number} [fixedBarHeight=false] - * @returns {Chart} - */ - _chart.fixedBarHeight = function (fixedBarHeight) { - if (!arguments.length) { - return _fixedBarHeight; - } - _fixedBarHeight = fixedBarHeight; - return _chart; - }; - - /** - * Get or set the vertical gap space between rows on a particular row chart instance - * @name gap - * @memberof dc.rowChart - * @instance - * @param {Number} [gap=5] - * @returns {Chart} - */ - _chart.gap = function (gap) { - if (!arguments.length) { - return _gap; - } - _gap = gap; - return _chart; - }; - - /** - * Get or set the elasticity on x axis. If this attribute is set to true, then the x axis will rescle to auto-fit the - * data range when filtered. - * @name elasticX - * @memberof dc.rowChart - * @instance - * @param {Boolean} [elasticX] - * @returns {Chart} - */ - _chart.elasticX = function (elasticX) { - if (!arguments.length) { - return _elasticX; - } - _elasticX = elasticX; - return _chart; - }; - - /** - * Get or set the x offset (horizontal space to the top left corner of a row) for labels on a particular row chart. - * @name labelOffsetX - * @memberof dc.rowChart - * @instance - * @param {Number} [labelOffsetX=10] - * @returns {Chart} - */ - _chart.labelOffsetX = function (labelOffsetX) { - if (!arguments.length) { - return _labelOffsetX; - } - _labelOffsetX = labelOffsetX; - return _chart; - }; - - /** - * Get or set the y offset (vertical space to the top left corner of a row) for labels on a particular row chart. - * @name labelOffsetY - * @memberof dc.rowChart - * @instance - * @param {Number} [labelOffsety=15] - * @returns {Chart} - */ - _chart.labelOffsetY = function (labelOffsety) { - if (!arguments.length) { - return _labelOffsetY; - } - _labelOffsetY = labelOffsety; - _hasLabelOffsetY = true; - return _chart; - }; - - /** - * Get of set the x offset (horizontal space between right edge of row and right edge or text. - * @name titleLabelOffsetX - * @memberof dc.rowChart - * @instance - * @param {Number} [titleLabelOffsetX=2] - * @returns {Chart} - */ - _chart.titleLabelOffsetX = function (titleLabelOffsetX) { - if (!arguments.length) { - return _titleLabelOffsetX; - } - _titleLabelOffsetX = titleLabelOffsetX; - return _chart; - }; - - function isSelectedRow (d) { - return _chart.hasFilter(_chart.cappedKeyAccessor(d)); - } - - return _chart.anchor(parent, chartGroup); -}; - -/** - * Legend is a attachable widget that can be added to other dc charts to render horizontal legend - * labels. - * Examples: - * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/) - * - [Canadian City Crime Stats](http://dc-js.github.com/dc.js/crime/index.html) - * @name legend - * @memberof dc - * @example - * chart.legend(dc.legend().x(400).y(10).itemHeight(13).gap(5)) - * @returns {Legend} - */ -dc.legend = function () { - var LABEL_GAP = 2; - - var _legend = {}, - _parent, - _x = 0, - _y = 0, - _itemHeight = 12, - _gap = 5, - _horizontal = false, - _legendWidth = 560, - _itemWidth = 70, - _autoItemWidth = false; - - var _g; - - _legend.parent = function (p) { - if (!arguments.length) { - return _parent; - } - _parent = p; - return _legend; - }; - - _legend.render = function () { - _parent.svg().select('g.dc-legend').remove(); - _g = _parent.svg().append('g') - .attr('class', 'dc-legend') - .attr('transform', 'translate(' + _x + ',' + _y + ')'); - var legendables = _parent.legendables(); - - var itemEnter = _g.selectAll('g.dc-legend-item') - .data(legendables) - .enter() - .append('g') - .attr('class', 'dc-legend-item') - .on('mouseover', function (d) { - _parent.legendHighlight(d); - }) - .on('mouseout', function (d) { - _parent.legendReset(d); - }) - .on('click', function (d) { - d.chart.legendToggle(d); - }); - - _g.selectAll('g.dc-legend-item') - .classed('fadeout', function (d) { - return d.chart.isLegendableHidden(d); - }); - - if (legendables.some(dc.pluck('dashstyle'))) { - itemEnter - .append('line') - .attr('x1', 0) - .attr('y1', _itemHeight / 2) - .attr('x2', _itemHeight) - .attr('y2', _itemHeight / 2) - .attr('stroke-width', 2) - .attr('stroke-dasharray', dc.pluck('dashstyle')) - .attr('stroke', dc.pluck('color')); - } else { - itemEnter - .append('rect') - .attr('width', _itemHeight) - .attr('height', _itemHeight) - .attr('fill', function (d) {return d ? d.color : 'blue';}); - } - - itemEnter.append('text') - .text(dc.pluck('name')) - .attr('x', _itemHeight + LABEL_GAP) - .attr('y', function () { - return _itemHeight / 2 + (this.clientHeight ? this.clientHeight : 13) / 2 - 2; - }); - - var _cumulativeLegendTextWidth = 0; - var row = 0; - itemEnter.attr('transform', function (d, i) { - if (_horizontal) { - var translateBy = 'translate(' + _cumulativeLegendTextWidth + ',' + row * legendItemHeight() + ')'; - var itemWidth = _autoItemWidth === true ? this.getBBox().width + _gap : _itemWidth; - - if ((_cumulativeLegendTextWidth + itemWidth) >= _legendWidth) { - ++row ; - _cumulativeLegendTextWidth = 0 ; - } else { - _cumulativeLegendTextWidth += itemWidth; - } - return translateBy; - } else { - return 'translate(0,' + i * legendItemHeight() + ')'; - } - }); - }; - - function legendItemHeight () { - return _gap + _itemHeight; - } - - /** - * Set or get x coordinate for legend widget. - * @name x - * @memberof dc.legend - * @instance - * @param {Number} [x=0] - * @returns {Legend} - */ - _legend.x = function (x) { - if (!arguments.length) { - return _x; - } - _x = x; - return _legend; - }; - - /** - * Set or get y coordinate for legend widget. - * @name y - * @memberof dc.legend - * @instance - * @param {Number} [y=0] - * @returns {Legend} - */ - _legend.y = function (y) { - if (!arguments.length) { - return _y; - } - _y = y; - return _legend; - }; - - /** - * Set or get gap between legend items. - * @name gap - * @memberof dc.legend - * @instance - * @param {Number} [gap=5] - * @returns {Legend} - */ - _legend.gap = function (gap) { - if (!arguments.length) { - return _gap; - } - _gap = gap; - return _legend; - }; - - /** - * Set or get legend item height. - * @name itemHeight - * @memberof dc.legend - * @instance - * @param {Number} [itemHeight=12] - * @returns {Legend} - */ - _legend.itemHeight = function (itemHeight) { - if (!arguments.length) { - return _itemHeight; - } - _itemHeight = itemHeight; - return _legend; - }; - - /** - * Position legend horizontally instead of vertically. - * @name horizontal - * @memberof dc.legend - * @instance - * @param {Boolean} [horizontal=false] - * @returns {Legend} - */ - _legend.horizontal = function (horizontal) { - if (!arguments.length) { - return _horizontal; - } - _horizontal = horizontal; - return _legend; - }; - - /** - * Maximum width for horizontal legend. - * @name legendWidth - * @memberof dc.legend - * @instance - * @param {Number} [legendWidth=500] - * @returns {Legend} - */ - _legend.legendWidth = function (legendWidth) { - if (!arguments.length) { - return _legendWidth; - } - _legendWidth = legendWidth; - return _legend; - }; - - /** - * legendItem width for horizontal legend. - * @name itemWidth - * @memberof dc.legend - * @instance - * @param {Number} [itemWidth=70] - * @returns {Legend} - */ - _legend.itemWidth = function (itemWidth) { - if (!arguments.length) { - return _itemWidth; - } - _itemWidth = itemWidth; - return _legend; - }; - - /** - * Turn automatic width for legend items on or off. If true, itemWidth() is ignored. - * This setting takes into account gap(). - * @name autoItemWidth - * @memberof dc.legend - * @instance - * @param {Boolean} [autoItemWidth=false] - * @returns {Legend} - */ - _legend.autoItemWidth = function (autoItemWidth) { - if (!arguments.length) { - return _autoItemWidth; - } - _autoItemWidth = autoItemWidth; - return _legend; - }; - - return _legend; -}; - -/** - * A scatter plot chart - * @name scatterPlot - * @memberof dc - * @mixes dc.coordinateGridMixin - * @example - * // create a scatter plot under #chart-container1 element using the default global chart group - * var chart1 = dc.scatterPlot('#chart-container1'); - * // create a scatter plot under #chart-container2 element using chart group A - * var chart2 = dc.scatterPlot('#chart-container2', 'chartGroupA'); - * // create a sub-chart under a composite parent chart - * var chart3 = dc.scatterPlot(compositeChart); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {SeriesChart} - */ -dc.scatterPlot = function (parent, chartGroup) { - var _chart = dc.coordinateGridMixin({}); - var _symbol = d3.svg.symbol(); - - var _existenceAccessor = function (d) { return d.value; }; - - var originalKeyAccessor = _chart.keyAccessor(); - _chart.keyAccessor(function (d) { return originalKeyAccessor(d)[0]; }); - _chart.valueAccessor(function (d) { return originalKeyAccessor(d)[1]; }); - _chart.colorAccessor(function () { return _chart._groupName; }); - - var _locator = function (d) { - return 'translate(' + _chart.x()(_chart.keyAccessor()(d)) + ',' + - _chart.y()(_chart.valueAccessor()(d)) + ')'; - }; - - var _symbolSize = 3; - var _highlightedSize = 5; - var _hiddenSize = 0; - - _symbol.size(function (d) { - if (!_existenceAccessor(d)) { - return _hiddenSize; - } else if (this.filtered) { - return Math.pow(_highlightedSize, 2); - } else { - return Math.pow(_symbolSize, 2); - } - }); - - dc.override(_chart, '_filter', function (filter) { - if (!arguments.length) { - return _chart.__filter(); - } - - return _chart.__filter(dc.filters.RangedTwoDimensionalFilter(filter)); - }); - - _chart.plotData = function () { - var symbols = _chart.chartBodyG().selectAll('path.symbol') - .data(_chart.data()); - - symbols - .enter() - .append('path') - .attr('class', 'symbol') - .attr('opacity', 0) - .attr('fill', _chart.getColor) - .attr('transform', _locator); - - dc.transition(symbols, _chart.transitionDuration()) - .attr('opacity', function (d) { return _existenceAccessor(d) ? 1 : 0; }) - .attr('fill', _chart.getColor) - .attr('transform', _locator) - .attr('d', _symbol); - - dc.transition(symbols.exit(), _chart.transitionDuration()) - .attr('opacity', 0).remove(); - }; - - /** - * Get or set the existence accessor. If a point exists, it is drawn with symbolSize radius and - * opacity 1; if it does not exist, it is drawn with hiddenSize radius and opacity 0. By default, - * the existence accessor checks if the reduced value is truthy. - * @name existenceAccessor - * @memberof dc.scatterPlot - * @instance - * @param {Function} [accessor] - * @returns {Chart} - */ - _chart.existenceAccessor = function (accessor) { - if (!arguments.length) { - return _existenceAccessor; - } - _existenceAccessor = accessor; - return this; - }; - - /** - * Get or set the symbol type used for each point. By default the symbol is a circle. See the D3 - * [docs](https://github.com/mbostock/d3/wiki/SVG-Shapes#wiki-symbol_type) for acceptable types. - * Type can be a constant or an accessor. - * @name symbol - * @memberof dc.scatterPlot - * @instance - * @param {Function} [type] - * @returns {Chart} - */ - _chart.symbol = function (type) { - if (!arguments.length) { - return _symbol.type(); - } - _symbol.type(type); - return _chart; - }; - - /** - * Set or get radius for symbols. - * @name symbolSize - * @memberof dc.scatterPlot - * @instance - * @param {Number} [symbolSize=3] - * @returns {Chart} - */ - _chart.symbolSize = function (symbolSize) { - if (!arguments.length) { - return _symbolSize; - } - _symbolSize = symbolSize; - return _chart; - }; - - /** - * Set or get radius for highlighted symbols. - * @name highlightedSize - * @memberof dc.scatterPlot - * @instance - * @param {Number} [highlightedSize=5] - * @returns {Chart} - */ - _chart.highlightedSize = function (highlightedSize) { - if (!arguments.length) { - return _highlightedSize; - } - _highlightedSize = highlightedSize; - return _chart; - }; - - /** - * Set or get radius for symbols when the group is empty. - * @name hiddenSize - * @memberof dc.scatterPlot - * @instance - * @param {Number} [hiddenSize=0] - * @returns {Chart} - */ - _chart.hiddenSize = function (hiddenSize) { - if (!arguments.length) { - return _hiddenSize; - } - _hiddenSize = hiddenSize; - return _chart; - }; - - _chart.legendables = function () { - return [{chart: _chart, name: _chart._groupName, color: _chart.getColor()}]; - }; - - _chart.legendHighlight = function (d) { - resizeSymbolsWhere(function (symbol) { - return symbol.attr('fill') === d.color; - }, _highlightedSize); - _chart.selectAll('.chart-body path.symbol').filter(function () { - return d3.select(this).attr('fill') !== d.color; - }).classed('fadeout', true); - }; - - _chart.legendReset = function (d) { - resizeSymbolsWhere(function (symbol) { - return symbol.attr('fill') === d.color; - }, _symbolSize); - _chart.selectAll('.chart-body path.symbol').filter(function () { - return d3.select(this).attr('fill') !== d.color; - }).classed('fadeout', false); - }; - - function resizeSymbolsWhere (condition, size) { - var symbols = _chart.selectAll('.chart-body path.symbol').filter(function () { - return condition(d3.select(this)); - }); - var oldSize = _symbol.size(); - _symbol.size(Math.pow(size, 2)); - dc.transition(symbols, _chart.transitionDuration()).attr('d', _symbol); - _symbol.size(oldSize); - } - - _chart.setHandlePaths = function () { - // no handle paths for poly-brushes - }; - - _chart.extendBrush = function () { - var extent = _chart.brush().extent(); - if (_chart.round()) { - extent[0] = extent[0].map(_chart.round()); - extent[1] = extent[1].map(_chart.round()); - - _chart.g().select('.brush') - .call(_chart.brush().extent(extent)); - } - return extent; - }; - - _chart.brushIsEmpty = function (extent) { - return _chart.brush().empty() || !extent || extent[0][0] >= extent[1][0] || extent[0][1] >= extent[1][1]; - }; - - function resizeFiltered (filter) { - var symbols = _chart.selectAll('.chart-body path.symbol').each(function (d) { - this.filtered = filter && filter.isFiltered(d.key); - }); - - dc.transition(symbols, _chart.transitionDuration()).attr('d', _symbol); - } - - _chart._brushing = function () { - var extent = _chart.extendBrush(); - - _chart.redrawBrush(_chart.g()); - - if (_chart.brushIsEmpty(extent)) { - dc.events.trigger(function () { - _chart.filter(null); - _chart.redrawGroup(); - }); - - resizeFiltered(false); - - } else { - var ranged2DFilter = dc.filters.RangedTwoDimensionalFilter(extent); - dc.events.trigger(function () { - _chart.filter(null); - _chart.filter(ranged2DFilter); - _chart.redrawGroup(); - }, dc.constants.EVENT_DELAY); - - resizeFiltered(ranged2DFilter); - } - }; - - _chart.setBrushY = function (gBrush) { - gBrush.call(_chart.brush().y(_chart.y())); - }; - - return _chart.anchor(parent, chartGroup); -}; - -/** - * A display of a single numeric value. - * Unlike other charts, you do not need to set a dimension. Instead a group object must be provided and - * a valueAccessor that returns a single value. - * @name numberDisplay - * @memberof dc - * @mixes dc.baseMixin - * @example - * // create a number display under #chart-container1 element using the default global chart group - * var display1 = dc.numberDisplay('#chart-container1'); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {NumberDisplay} - */ -dc.numberDisplay = function (parent, chartGroup) { - var SPAN_CLASS = 'number-display'; - var _formatNumber = d3.format('.2s'); - var _chart = dc.baseMixin({}); - var _html = {one: '', some: '', none: ''}; - - // dimension not required - _chart._mandatoryAttributes(['group']); - - /** - * Gets or sets an optional object specifying HTML templates to use depending on the number - * displayed. The text `%number` will be replaced with the current value. - * - one: HTML template to use if the number is 1 - * - zero: HTML template to use if the number is 0 - * - some: HTML template to use otherwise - * @name html - * @memberof dc.numberDisplay - * @instance - * @example - * numberWidget.html({ - * one:'%number record', - * some:'%number records', - * none:'no records'}) - * @param {{one:String, some:String, none:String}} [html={one: '', some: '', none: ''}] - * @returns {Chart} - */ - _chart.html = function (html) { - if (!arguments.length) { - return _html; - } - if (html.none) { - _html.none = html.none;//if none available - } else if (html.one) { - _html.none = html.one;//if none not available use one - } else if (html.some) { - _html.none = html.some;//if none and one not available use some - } - if (html.one) { - _html.one = html.one;//if one available - } else if (html.some) { - _html.one = html.some;//if one not available use some - } - if (html.some) { - _html.some = html.some;//if some available - } else if (html.one) { - _html.some = html.one;//if some not available use one - } - return _chart; - }; - - /** - * Calculate and return the underlying value of the display - * @name value - * @memberof dc.numberDisplay - * @instance - * @returns {Number} - */ - _chart.value = function () { - return _chart.data(); - }; - - _chart.data(function (group) { - var valObj = group.value ? group.value() : group.top(1)[0]; - return _chart.valueAccessor()(valObj); - }); - - _chart.transitionDuration(250); // good default - - _chart._doRender = function () { - var newValue = _chart.value(), - span = _chart.selectAll('.' + SPAN_CLASS); - - if (span.empty()) { - span = span.data([0]) - .enter() - .append('span') - .attr('class', SPAN_CLASS); - } - - span.transition() - .duration(_chart.transitionDuration()) - .ease('quad-out-in') - .tween('text', function () { - var interp = d3.interpolateNumber(this.lastValue || 0, newValue); - this.lastValue = newValue; - return function (t) { - var html = null, num = _chart.formatNumber()(interp(t)); - if (newValue === 0 && (_html.none !== '')) { - html = _html.none; - } else if (newValue === 1 && (_html.one !== '')) { - html = _html.one; - } else if (_html.some !== '') { - html = _html.some; - } - this.innerHTML = html ? html.replace('%number', num) : num; - }; - }); - }; - - _chart._doRedraw = function () { - return _chart._doRender(); - }; - - /** - * Get or set a function to format the value for the display. - * @name formatNumber - * @memberof dc.numberDisplay - * @instance - * @param {Function} [formatter=d3.format('.2s')] - * @returns {Chart} - */ - _chart.formatNumber = function (formatter) { - if (!arguments.length) { - return _formatNumber; - } - _formatNumber = formatter; - return _chart; - }; - - return _chart.anchor(parent, chartGroup); -}; - -/** - * A heat map is matrix that represents the values of two dimensions of data using colors. - * @name heatMap - * @memberof dc - * @mixes dc.colorMixin - * @mixes dc.marginMixin - * @mixes dc.baseMixin - * @example - * // create a heat map under #chart-container1 element using the default global chart group - * var heatMap1 = dc.heatMap('#chart-container1'); - * // create a heat map under #chart-container2 element using chart group A - * var heatMap2 = dc.heatMap('#chart-container2', 'chartGroupA'); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {HeatMap} - */ -dc.heatMap = function (parent, chartGroup) { - - var DEFAULT_BORDER_RADIUS = 6.75; - - var _chartBody; - - var _cols; - var _rows; - var _colOrdering = d3.ascending; - var _rowOrdering = d3.ascending; - var _colScale = d3.scale.ordinal(); - var _rowScale = d3.scale.ordinal(); - - var _xBorderRadius = DEFAULT_BORDER_RADIUS; - var _yBorderRadius = DEFAULT_BORDER_RADIUS; - - var _chart = dc.colorMixin(dc.marginMixin(dc.baseMixin({}))); - _chart._mandatoryAttributes(['group']); - _chart.title(_chart.colorAccessor()); - - var _colsLabel = function (d) { - return d; - }; - var _rowsLabel = function (d) { - return d; - }; - - /** - * Set or get the column label function. The chart class uses this function to render - * column labels on the X axis. It is passed the column name. - * @name colsLabel - * @memberof dc.heatMap - * @instance - * @example - * // the default label function just returns the name - * chart.colsLabel(function(d) { return d; }); - * @param {Function} [labelFunction=function(d) { return d; }] - * @returns {Chart} - */ - _chart.colsLabel = function (labelFunction) { - if (!arguments.length) { - return _colsLabel; - } - _colsLabel = labelFunction; - return _chart; - }; - - /** - * Set or get the row label function. The chart class uses this function to render - * row labels on the Y axis. It is passed the row name. - * @name rowsLabel - * @memberof dc.heatMap - * @instance - * @example - * // the default label function just returns the name - * chart.rowsLabel(function(d) { return d; }); - * @param {Function} [labelFunction=function(d) { return d; }] - * @returns {Chart} - */ - _chart.rowsLabel = function (labelFunction) { - if (!arguments.length) { - return _rowsLabel; - } - _rowsLabel = labelFunction; - return _chart; - }; - - var _xAxisOnClick = function (d) { filterAxis(0, d); }; - var _yAxisOnClick = function (d) { filterAxis(1, d); }; - var _boxOnClick = function (d) { - var filter = d.key; - dc.events.trigger(function () { - _chart.filter(filter); - _chart.redrawGroup(); - }); - }; - - function filterAxis (axis, value) { - var cellsOnAxis = _chart.selectAll('.box-group').filter(function (d) { - return d.key[axis] === value; - }); - var unfilteredCellsOnAxis = cellsOnAxis.filter(function (d) { - return !_chart.hasFilter(d.key); - }); - dc.events.trigger(function () { - if (unfilteredCellsOnAxis.empty()) { - cellsOnAxis.each(function (d) { - _chart.filter(d.key); - }); - } else { - unfilteredCellsOnAxis.each(function (d) { - _chart.filter(d.key); - }); - } - _chart.redrawGroup(); - }); - } - - dc.override(_chart, 'filter', function (filter) { - if (!arguments.length) { - return _chart._filter(); - } - - return _chart._filter(dc.filters.TwoDimensionalFilter(filter)); - }); - - /** - * Gets or sets the values used to create the rows of the heatmap, as an array. By default, all - * the values will be fetched from the data using the value accessor. - * @name rows - * @memberof dc.heatMap - * @instance - * @param {Array} [rows] - * @returns {Chart} - */ - - _chart.rows = function (rows) { - if (!arguments.length) { - return _rows; - } - _rows = rows; - return _chart; - }; - - /** - #### .rowOrdering([orderFunction]) - Get or set an accessor to order the rows. Default is d3.ascending. - */ - _chart.rowOrdering = function (_) { - if (!arguments.length) { - return _rowOrdering; - } - _rowOrdering = _; - return _chart; - }; - - /** - * Gets or sets the keys used to create the columns of the heatmap, as an array. By default, all - * the values will be fetched from the data using the key accessor. - * @name cols - * @memberof dc.heatMap - * @instance - * @param {Array} [cols] - * @returns {Chart} - */ - _chart.cols = function (cols) { - if (!arguments.length) { - return _cols; - } - _cols = cols; - return _chart; - }; - - /** - #### .colOrdering([orderFunction]) - Get or set an accessor to order the cols. Default is ascending. - */ - _chart.colOrdering = function (_) { - if (!arguments.length) { - return _colOrdering; - } - _colOrdering = _; - return _chart; - }; - - _chart._doRender = function () { - _chart.resetSvg(); - - _chartBody = _chart.svg() - .append('g') - .attr('class', 'heatmap') - .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')'); - - return _chart._doRedraw(); - }; - - _chart._doRedraw = function () { - var data = _chart.data(), - rows = _chart.rows() || data.map(_chart.valueAccessor()), - cols = _chart.cols() || data.map(_chart.keyAccessor()); - if (_rowOrdering) { - rows = rows.sort(_rowOrdering); - } - if (_colOrdering) { - cols = cols.sort(_colOrdering); - } - rows = _rowScale.domain(rows); - cols = _colScale.domain(cols); - - var rowCount = rows.domain().length, - colCount = cols.domain().length, - boxWidth = Math.floor(_chart.effectiveWidth() / colCount), - boxHeight = Math.floor(_chart.effectiveHeight() / rowCount); - - cols.rangeRoundBands([0, _chart.effectiveWidth()]); - rows.rangeRoundBands([_chart.effectiveHeight(), 0]); - - var boxes = _chartBody.selectAll('g.box-group').data(_chart.data(), function (d, i) { - return _chart.keyAccessor()(d, i) + '\0' + _chart.valueAccessor()(d, i); - }); - var gEnter = boxes.enter().append('g') - .attr('class', 'box-group'); - - gEnter.append('rect') - .attr('class', 'heat-box') - .attr('fill', 'white') - .on('click', _chart.boxOnClick()); - - if (_chart.renderTitle()) { - gEnter.append('title'); - boxes.selectAll('title').text(_chart.title()); - } - - dc.transition(boxes.selectAll('rect'), _chart.transitionDuration()) - .attr('x', function (d, i) { return cols(_chart.keyAccessor()(d, i)); }) - .attr('y', function (d, i) { return rows(_chart.valueAccessor()(d, i)); }) - .attr('rx', _xBorderRadius) - .attr('ry', _yBorderRadius) - .attr('fill', _chart.getColor) - .attr('width', boxWidth) - .attr('height', boxHeight); - - boxes.exit().remove(); - - var gCols = _chartBody.selectAll('g.cols'); - if (gCols.empty()) { - gCols = _chartBody.append('g').attr('class', 'cols axis'); - } - var gColsText = gCols.selectAll('text').data(cols.domain()); - gColsText.enter().append('text') - .attr('x', function (d) { return cols(d) + boxWidth / 2; }) - .style('text-anchor', 'middle') - .attr('y', _chart.effectiveHeight()) - .attr('dy', 12) - .on('click', _chart.xAxisOnClick()) - .text(_chart.colsLabel()); - dc.transition(gColsText, _chart.transitionDuration()) - .text(_chart.colsLabel()) - .attr('x', function (d) { return cols(d) + boxWidth / 2; }) - .attr('y', _chart.effectiveHeight()); - gColsText.exit().remove(); - var gRows = _chartBody.selectAll('g.rows'); - if (gRows.empty()) { - gRows = _chartBody.append('g').attr('class', 'rows axis'); - } - var gRowsText = gRows.selectAll('text').data(rows.domain()); - gRowsText.enter().append('text') - .attr('dy', 6) - .style('text-anchor', 'end') - .attr('x', 0) - .attr('dx', -2) - .on('click', _chart.yAxisOnClick()) - .text(_chart.rowsLabel()); - dc.transition(gRowsText, _chart.transitionDuration()) - .text(_chart.rowsLabel()) - .attr('y', function (d) { return rows(d) + boxHeight / 2; }); - gRowsText.exit().remove(); - - if (_chart.hasFilter()) { - _chart.selectAll('g.box-group').each(function (d) { - if (_chart.isSelectedNode(d)) { - _chart.highlightSelected(this); - } else { - _chart.fadeDeselected(this); - } - }); - } else { - _chart.selectAll('g.box-group').each(function () { - _chart.resetHighlight(this); - }); - } - return _chart; - }; - - /** - * Gets or sets the handler that fires when an individual cell is clicked in the heatmap. - * By default, filtering of the cell will be toggled. - * @name boxOnClick - * @memberof dc.heatMap - * @instance - * @param {Function} [handler] - * @returns {Chart} - */ - _chart.boxOnClick = function (handler) { - if (!arguments.length) { - return _boxOnClick; - } - _boxOnClick = handler; - return _chart; - }; - - /** - * Gets or sets the handler that fires when a column tick is clicked in the x axis. - * By default, if any cells in the column are unselected, the whole column will be selected, - * otherwise the whole column will be unselected. - * @name xAxisOnClick - * @memberof dc.heatMap - * @instance - * @param {Function} [handler] - * @returns {Chart} - */ - _chart.xAxisOnClick = function (handler) { - if (!arguments.length) { - return _xAxisOnClick; - } - _xAxisOnClick = handler; - return _chart; - }; - - /** - * Gets or sets the handler that fires when a row tick is clicked in the y axis. - * By default, if any cells in the row are unselected, the whole row will be selected, - * otherwise the whole row will be unselected. - * @name yAxisOnClick - * @memberof dc.heatMap - * @instance - * @param {Function} [handler] - * @returns {Chart} - */ - _chart.yAxisOnClick = function (handler) { - if (!arguments.length) { - return _yAxisOnClick; - } - _yAxisOnClick = handler; - return _chart; - }; - - /** - * Gets or sets the X border radius. Set to 0 to get full rectangles. - * @name xBorderRadius - * @memberof dc.heatMap - * @instance - * @param {Number} [xBorderRadius=6.75] - * @returns {Chart} - */ - _chart.xBorderRadius = function (xBorderRadius) { - if (!arguments.length) { - return _xBorderRadius; - } - _xBorderRadius = xBorderRadius; - return _chart; - }; - - /** - * Gets or sets the Y border radius. Set to 0 to get full rectangles. - * @name yBorderRadius - * @memberof dc.heatMap - * @instance - * @param {Number} [yBorderRadius=6.75] - * @returns {Chart} - */ - _chart.yBorderRadius = function (yBorderRadius) { - if (!arguments.length) { - return _yBorderRadius; - } - _yBorderRadius = yBorderRadius; - return _chart; - }; - - _chart.isSelectedNode = function (d) { - return _chart.hasFilter(d.key); - }; - - return _chart.anchor(parent, chartGroup); -}; - -// https://github.com/d3/d3-plugins/blob/master/box/box.js -(function () { - - // Inspired by http://informationandvisualization.de/blog/box-plot - d3.box = function () { - var width = 1, - height = 1, - duration = 0, - domain = null, - value = Number, - whiskers = boxWhiskers, - quartiles = boxQuartiles, - tickFormat = null; - - // For each small multiple… - function box (g) { - g.each(function (d, i) { - d = d.map(value).sort(d3.ascending); - var g = d3.select(this), - n = d.length, - min = d[0], - max = d[n - 1]; - - // Compute quartiles. Must return exactly 3 elements. - var quartileData = d.quartiles = quartiles(d); - - // Compute whiskers. Must return exactly 2 elements, or null. - var whiskerIndices = whiskers && whiskers.call(this, d, i), - whiskerData = whiskerIndices && whiskerIndices.map(function (i) { return d[i]; }); - - // Compute outliers. If no whiskers are specified, all data are 'outliers'. - // We compute the outliers as indices, so that we can join across transitions! - var outlierIndices = whiskerIndices ? - d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n)) : d3.range(n); - - // Compute the new x-scale. - var x1 = d3.scale.linear() - .domain(domain && domain.call(this, d, i) || [min, max]) - .range([height, 0]); - - // Retrieve the old x-scale, if this is an update. - var x0 = this.__chart__ || d3.scale.linear() - .domain([0, Infinity]) - .range(x1.range()); - - // Stash the new scale. - this.__chart__ = x1; - - // Note: the box, median, and box tick elements are fixed in number, - // so we only have to handle enter and update. In contrast, the outliers - // and other elements are variable, so we need to exit them! Variable - // elements also fade in and out. - - // Update center line: the vertical line spanning the whiskers. - var center = g.selectAll('line.center') - .data(whiskerData ? [whiskerData] : []); - - center.enter().insert('line', 'rect') - .attr('class', 'center') - .attr('x1', width / 2) - .attr('y1', function (d) { return x0(d[0]); }) - .attr('x2', width / 2) - .attr('y2', function (d) { return x0(d[1]); }) - .style('opacity', 1e-6) - .transition() - .duration(duration) - .style('opacity', 1) - .attr('y1', function (d) { return x1(d[0]); }) - .attr('y2', function (d) { return x1(d[1]); }); - - center.transition() - .duration(duration) - .style('opacity', 1) - .attr('y1', function (d) { return x1(d[0]); }) - .attr('y2', function (d) { return x1(d[1]); }); - - center.exit().transition() - .duration(duration) - .style('opacity', 1e-6) - .attr('y1', function (d) { return x1(d[0]); }) - .attr('y2', function (d) { return x1(d[1]); }) - .remove(); - - // Update innerquartile box. - var box = g.selectAll('rect.box') - .data([quartileData]); - - box.enter().append('rect') - .attr('class', 'box') - .attr('x', 0) - .attr('y', function (d) { return x0(d[2]); }) - .attr('width', width) - .attr('height', function (d) { return x0(d[0]) - x0(d[2]); }) - .transition() - .duration(duration) - .attr('y', function (d) { return x1(d[2]); }) - .attr('height', function (d) { return x1(d[0]) - x1(d[2]); }); - - box.transition() - .duration(duration) - .attr('y', function (d) { return x1(d[2]); }) - .attr('height', function (d) { return x1(d[0]) - x1(d[2]); }); - - // Update median line. - var medianLine = g.selectAll('line.median') - .data([quartileData[1]]); - - medianLine.enter().append('line') - .attr('class', 'median') - .attr('x1', 0) - .attr('y1', x0) - .attr('x2', width) - .attr('y2', x0) - .transition() - .duration(duration) - .attr('y1', x1) - .attr('y2', x1); - - medianLine.transition() - .duration(duration) - .attr('y1', x1) - .attr('y2', x1); - - // Update whiskers. - var whisker = g.selectAll('line.whisker') - .data(whiskerData || []); - - whisker.enter().insert('line', 'circle, text') - .attr('class', 'whisker') - .attr('x1', 0) - .attr('y1', x0) - .attr('x2', width) - .attr('y2', x0) - .style('opacity', 1e-6) - .transition() - .duration(duration) - .attr('y1', x1) - .attr('y2', x1) - .style('opacity', 1); - - whisker.transition() - .duration(duration) - .attr('y1', x1) - .attr('y2', x1) - .style('opacity', 1); - - whisker.exit().transition() - .duration(duration) - .attr('y1', x1) - .attr('y2', x1) - .style('opacity', 1e-6) - .remove(); - - // Update outliers. - var outlier = g.selectAll('circle.outlier') - .data(outlierIndices, Number); - - outlier.enter().insert('circle', 'text') - .attr('class', 'outlier') - .attr('r', 5) - .attr('cx', width / 2) - .attr('cy', function (i) { return x0(d[i]); }) - .style('opacity', 1e-6) - .transition() - .duration(duration) - .attr('cy', function (i) { return x1(d[i]); }) - .style('opacity', 1); - - outlier.transition() - .duration(duration) - .attr('cy', function (i) { return x1(d[i]); }) - .style('opacity', 1); - - outlier.exit().transition() - .duration(duration) - .attr('cy', function (i) { return x1(d[i]); }) - .style('opacity', 1e-6) - .remove(); - - // Compute the tick format. - var format = tickFormat || x1.tickFormat(8); - - // Update box ticks. - var boxTick = g.selectAll('text.box') - .data(quartileData); - - boxTick.enter().append('text') - .attr('class', 'box') - .attr('dy', '.3em') - .attr('dx', function (d, i) { return i & 1 ? 6 : -6; }) - .attr('x', function (d, i) { return i & 1 ? width : 0; }) - .attr('y', x0) - .attr('text-anchor', function (d, i) { return i & 1 ? 'start' : 'end'; }) - .text(format) - .transition() - .duration(duration) - .attr('y', x1); - - boxTick.transition() - .duration(duration) - .text(format) - .attr('y', x1); - - // Update whisker ticks. These are handled separately from the box - // ticks because they may or may not exist, and we want don't want - // to join box ticks pre-transition with whisker ticks post-. - var whiskerTick = g.selectAll('text.whisker') - .data(whiskerData || []); - - whiskerTick.enter().append('text') - .attr('class', 'whisker') - .attr('dy', '.3em') - .attr('dx', 6) - .attr('x', width) - .attr('y', x0) - .text(format) - .style('opacity', 1e-6) - .transition() - .duration(duration) - .attr('y', x1) - .style('opacity', 1); - - whiskerTick.transition() - .duration(duration) - .text(format) - .attr('y', x1) - .style('opacity', 1); - - whiskerTick.exit().transition() - .duration(duration) - .attr('y', x1) - .style('opacity', 1e-6) - .remove(); - }); - d3.timer.flush(); - } - - box.width = function (x) { - if (!arguments.length) { - return width; - } - width = x; - return box; - }; - - box.height = function (x) { - if (!arguments.length) { - return height; - } - height = x; - return box; - }; - - box.tickFormat = function (x) { - if (!arguments.length) { - return tickFormat; - } - tickFormat = x; - return box; - }; - - box.duration = function (x) { - if (!arguments.length) { - return duration; - } - duration = x; - return box; - }; - - box.domain = function (x) { - if (!arguments.length) { - return domain; - } - domain = x === null ? x : d3.functor(x); - return box; - }; - - box.value = function (x) { - if (!arguments.length) { - return value; - } - value = x; - return box; - }; - - box.whiskers = function (x) { - if (!arguments.length) { - return whiskers; - } - whiskers = x; - return box; - }; - - box.quartiles = function (x) { - if (!arguments.length) { - return quartiles; - } - quartiles = x; - return box; - }; - - return box; - }; - - function boxWhiskers (d) { - return [0, d.length - 1]; - } - - function boxQuartiles (d) { - return [ - d3.quantile(d, 0.25), - d3.quantile(d, 0.5), - d3.quantile(d, 0.75) - ]; - } - -})(); - -/** - * A box plot is a chart that depicts numerical data via their quartile ranges. - * Examples: - * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/) - * - [Canadian City Crime Stats](http://dc-js.github.com/dc.js/crime/index.html) - * @name boxPlot - * @memberof dc - * @mixes dc.coordinateGridMixin - * @example - * // create a box plot under #chart-container1 element using the default global chart group - * var boxPlot1 = dc.boxPlot('#chart-container1'); - * // create a box plot under #chart-container2 element using chart group A - * var boxPlot2 = dc.boxPlot('#chart-container2', 'chartGroupA'); - * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid - * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying - * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart - * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance. - * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in. - * Interaction with a chart will only trigger events and redraws within the chart's group. - * @returns {BoxPlot} - */ -dc.boxPlot = function (parent, chartGroup) { - var _chart = dc.coordinateGridMixin({}); - - // Returns a function to compute the interquartile range. - function DEFAULT_WHISKERS_IQR (k) { - return function (d) { - var q1 = d.quartiles[0], - q3 = d.quartiles[2], - iqr = (q3 - q1) * k, - i = -1, - j = d.length; - do { ++i; } while (d[i] < q1 - iqr); - do { --j; } while (d[j] > q3 + iqr); - return [i, j]; - }; - } - - var _whiskerIqrFactor = 1.5; - var _whiskersIqr = DEFAULT_WHISKERS_IQR; - var _whiskers = _whiskersIqr(_whiskerIqrFactor); - - var _box = d3.box(); - var _tickFormat = null; - - var _boxWidth = function (innerChartWidth, xUnits) { - if (_chart.isOrdinal()) { - return _chart.x().rangeBand(); - } else { - return innerChartWidth / (1 + _chart.boxPadding()) / xUnits; - } - }; - - // default padding to handle min/max whisker text - _chart.yAxisPadding(12); - - // default to ordinal - _chart.x(d3.scale.ordinal()); - _chart.xUnits(dc.units.ordinal); - - // valueAccessor should return an array of values that can be coerced into numbers - // or if data is overloaded for a static array of arrays, it should be `Number`. - // Empty arrays are not included. - _chart.data(function (group) { - return group.all().map(function (d) { - d.map = function (accessor) { return accessor.call(d, d); }; - return d; - }).filter(function (d) { - var values = _chart.valueAccessor()(d); - return values.length !== 0; - }); - }); - - /** - * Get or set the spacing between boxes as a fraction of box size. Valid values are within 0-1. - * See the [d3 docs](https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-ordinal_rangeBands) - * for a visual description of how the padding is applied. - * @name boxPadding - * @memberof dc.boxPlot - * @instance - * @param {Number} [padding=0.8] - * @returns {Number} - */ - _chart.boxPadding = _chart._rangeBandPadding; - _chart.boxPadding(0.8); - - /** - * Get or set the outer padding on an ordinal box chart. This setting has no effect on non-ordinal charts - * or on charts with a custom `.boxWidth`. Will pad the width by `padding * barWidth` on each side of the chart. - * @name outerPadding - * @memberof dc.boxPlot - * @instance - * @param {Number} [padding=0.5] - * @returns {Number} - */ - _chart.outerPadding = _chart._outerRangeBandPadding; - _chart.outerPadding(0.5); - - /** - * Get or set the numerical width of the boxplot box. The width may also be a function taking as - * parameters the chart width excluding the right and left margins, as well as the number of x - * units. - * @example - * // Using numerical parameter - * chart.boxWidth(10); - * // Using function - * chart.boxWidth((innerChartWidth, xUnits) { ... }); - * @name boxWidth - * @memberof dc.boxPlot - * @instance - * @param {Number|Function} [boxWidth=0.5] - * @returns {Number|Function} - */ - _chart.boxWidth = function (boxWidth) { - if (!arguments.length) { - return _boxWidth; - } - _boxWidth = d3.functor(boxWidth); - return _chart; - }; - - var boxTransform = function (d, i) { - var xOffset = _chart.x()(_chart.keyAccessor()(d, i)); - return 'translate(' + xOffset + ', 0)'; - }; - - _chart._preprocessData = function () { - if (_chart.elasticX()) { - _chart.x().domain([]); - } - }; - - _chart.plotData = function () { - var _calculatedBoxWidth = _boxWidth(_chart.effectiveWidth(), _chart.xUnitCount()); - - _box.whiskers(_whiskers) - .width(_calculatedBoxWidth) - .height(_chart.effectiveHeight()) - .value(_chart.valueAccessor()) - .domain(_chart.y().domain()) - .duration(_chart.transitionDuration()) - .tickFormat(_tickFormat); - - var boxesG = _chart.chartBodyG().selectAll('g.box').data(_chart.data(), function (d) { return d.key; }); - - renderBoxes(boxesG); - updateBoxes(boxesG); - removeBoxes(boxesG); - - _chart.fadeDeselectedArea(); - }; - - function renderBoxes (boxesG) { - var boxesGEnter = boxesG.enter().append('g'); - - boxesGEnter - .attr('class', 'box') - .attr('transform', boxTransform) - .call(_box) - .on('click', function (d) { - _chart.filter(d.key); - _chart.redrawGroup(); - }); - } - - function updateBoxes (boxesG) { - dc.transition(boxesG, _chart.transitionDuration()) - .attr('transform', boxTransform) - .call(_box) - .each(function () { - d3.select(this).select('rect.box').attr('fill', _chart.getColor); - }); - } - - function removeBoxes (boxesG) { - boxesG.exit().remove().call(_box); - } - - _chart.fadeDeselectedArea = function () { - if (_chart.hasFilter()) { - _chart.g().selectAll('g.box').each(function (d) { - if (_chart.isSelectedNode(d)) { - _chart.highlightSelected(this); - } else { - _chart.fadeDeselected(this); - } - }); - } else { - _chart.g().selectAll('g.box').each(function () { - _chart.resetHighlight(this); - }); - } - }; - - _chart.isSelectedNode = function (d) { - return _chart.hasFilter(d.key); - }; - - _chart.yAxisMin = function () { - var min = d3.min(_chart.data(), function (e) { - return d3.min(_chart.valueAccessor()(e)); - }); - return dc.utils.subtract(min, _chart.yAxisPadding()); - }; - - _chart.yAxisMax = function () { - var max = d3.max(_chart.data(), function (e) { - return d3.max(_chart.valueAccessor()(e)); - }); - return dc.utils.add(max, _chart.yAxisPadding()); - }; - - /** - * Set the numerical format of the boxplot median, whiskers and quartile labels. Defaults to - * integer formatting. - * @example - * // format ticks to 2 decimal places - * chart.tickFormat(d3.format('.2f')); - * @name tickFormat - * @memberof dc.boxPlot - * @instance - * @param {Function} [tickFormat] - * @returns {Number|Function} - */ - _chart.tickFormat = function (tickFormat) { - if (!arguments.length) { - return _tickFormat; - } - _tickFormat = tickFormat; - return _chart; - }; - - return _chart.anchor(parent, chartGroup); -}; - -/** - * The select menu is a simple widget designed to filter a dimension by selecting an option from - * an HTML `` menu. The menu can be optionally turned into a multiselect. + * @name selectMenu + * @memberof dc + * @mixes dc.baseMixin + * @example + * // create a select menu under #select-container using the default global chart group + * var select = dc.selectMenu('#select-container') + * .dimension(states) + * .group(stateGroup); + * // the option text can be set via the title() function + * // by default the option text is '`key`: `value`' + * select.title(function (d){ + * return 'STATE: ' + d.key; + * }) + * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid + * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying + * a dom block element such as a div; or a dom element or d3 selection. + * @param {String} [chartGroup] - The name of the chart group this widget should be placed in. + * Interaction with the widget will only trigger events and redraws within its group. + * @returns {selectMenu} + **/ +dc.selectMenu = function (parent, chartGroup) { + var SELECT_CSS_CLASS = 'dc-select-menu'; + var OPTION_CSS_CLASS = 'dc-select-option'; + + var _chart = dc.baseMixin({}); + + var _select; + var _promptText = 'Select all'; + var _multiple = false; + var _size = null; + var _order = function (a, b) { + return _chart.keyAccessor()(a) > _chart.keyAccessor()(b) ? + 1 : _chart.keyAccessor()(b) > _chart.keyAccessor()(a) ? + -1 : 0; + }; + + var _filterDisplayed = function (d) { + return _chart.valueAccessor()(d) > 0; + }; + + _chart.data(function (group) { + return group.all().filter(_filterDisplayed); + }); + + _chart._doRender = function () { + _chart.select('select').remove(); + _select = _chart.root().append('select') + .classed(SELECT_CSS_CLASS, true); + _select.append('option').text(_promptText).attr('value', ''); + + _chart._doRedraw(); + return _chart; + }; + + _chart._doRedraw = function () { + setAttributes(); + renderOptions(); + // select the option(s) corresponding to current filter(s) + if (_chart.hasFilter() && _multiple) { + _select.selectAll('option') + .property('selected', function (d) { + return d && _chart.filters().indexOf(String(_chart.keyAccessor()(d))) >= 0; + }); + } else if (_chart.hasFilter()) { + _select.property('value', _chart.filter()); + } else { + _select.property('value', ''); + } + return _chart; + }; + + function renderOptions () { + var options = _select.selectAll('option.' + OPTION_CSS_CLASS) + .data(_chart.data(), function (d) { return _chart.keyAccessor()(d); }); + + options.enter() + .append('option') + .classed(OPTION_CSS_CLASS, true) + .attr('value', function (d) { return _chart.keyAccessor()(d); }); + + options.text(_chart.title()); + options.exit().remove(); + _select.selectAll('option.' + OPTION_CSS_CLASS).sort(_order); + + _select.on('change', onChange); + return options; + } + + function onChange (d, i) { + var values; + var target = d3.event.target; + if (target.selectedOptions) { + var selectedOptions = Array.prototype.slice.call(target.selectedOptions); + values = selectedOptions.map(function (d) { + return d.value; + }); + } else { // IE and other browsers do not support selectedOptions + // adapted from this polyfill: https://gist.github.com/brettz9/4212217 + var options = [].slice.call(d3.event.target.options); + values = options.filter(function (option) { + return option.selected; + }).map(function (option) { + return option.value; + }); + } + // console.log(values); + // check if only prompt option is selected + if (values.length === 1 && values[0] === '') { + values = null; + } else if (!_multiple && values.length === 1) { + values = values[0]; + } + _chart.onChange(values); + } + + _chart.onChange = function (val) { + if (val && _multiple) { + _chart.replaceFilter([val]); + } else if (val) { + _chart.replaceFilter(val); + } else { + _chart.filterAll(); + } + dc.events.trigger(function () { + _chart.redrawGroup(); + }); + }; + + function setAttributes () { + if (_multiple) { + _select.attr('multiple', true); + } else { + _select.attr('multiple', null); + } + if (_size !== null) { + _select.attr('size', _size); + } else { + _select.attr('size', null); + } + } + + /** + * Get or set the function that controls the ordering of option tags in the + * select menu. By default options are ordered by the group key in ascending + * order. + * @name order + * @memberof dc.selectMenu + * @instance + * @param {Function} [order] + * @example + * // order by the group's value + * chart.order(function (a,b) { + * return a.value > b.value ? 1 : b.value > a.value ? -1 : 0; + * }); + **/ + _chart.order = function (order) { + if (!arguments.length) { + return _order; + } + _order = order; + return _chart; + }; + + /** + * Get or set the text displayed in the options used to prompt selection. + * @name promptText + * @memberof dc.selectMenu + * @instance + * @param {String} [promptText='Select all'] + * @example + * chart.promptText('All states'); + **/ + _chart.promptText = function (_) { + if (!arguments.length) { + return _promptText; + } + _promptText = _; + return _chart; + }; + + /** + * Get or set the function that filters option tags prior to display. By default options + * with a value of < 1 are not displayed. + * @name filterDisplayed + * @memberof dc.selectMenu + * @instance + * @param {function} [filterDisplayed] + * @example + * // display all options override the `filterDisplayed` function: + * chart.filterDisplayed(function () { + * return true; + * }); + **/ + _chart.filterDisplayed = function (filterDisplayed) { + if (!arguments.length) { + return _filterDisplayed; + } + _filterDisplayed = filterDisplayed; + return _chart; + }; + + /** + * Controls the type of select menu. Setting it to true converts the underlying + * HTML tag into a multiple select. + * @name multiple + * @memberof dc.selectMenu + * @instance + * @param {boolean} [multiple=false] + * @example + * chart.multiple(true); + **/ + _chart.multiple = function (multiple) { + if (!arguments.length) { + return _multiple; + } + _multiple = multiple; + + return _chart; + }; + + /** + * Controls the height, in lines, of the select menu, when `.multiple()` is true. If `null` (the default), + * uses the browser's default height. + * @name size + * @memberof dc.selectMenu + * @instance + * @param {?number} [size + * @example + * chart.size(10); + **/ + _chart.size = function (size) { + if (!arguments.length) { + return _size; + } + _size = size; + + return _chart; + }; + + return _chart.anchor(parent, chartGroup); +}; + +// Renamed functions + +dc.abstractBubbleChart = dc.bubbleMixin; +dc.baseChart = dc.baseMixin; +dc.capped = dc.capMixin; +dc.colorChart = dc.colorMixin; +dc.coordinateGridChart = dc.coordinateGridMixin; +dc.marginable = dc.marginMixin; +dc.stackableChart = dc.stackMixin; + +// Expose d3 and crossfilter, so that clients in browserify +// case can obtain them if they need them. +dc.d3 = d3; +dc.crossfilter = crossfilter; + +return dc;} + if(typeof define === "function" && define.amd) { + define(["d3", "crossfilter"], _dc); + } else if(typeof module === "object" && module.exports) { + var _d3 = require('d3'); + var _crossfilter = require('crossfilter'); + // When using npm + browserify, 'crossfilter' is a function, + // since package.json specifies index.js as main function, and it + // does special handling. When using bower + browserify, + // there's no main in bower.json (in fact, there's no bower.json), + // so we need to fix it. + if (typeof _crossfilter !== "function") { + _crossfilter = _crossfilter.crossfilter; + } + module.exports = _dc(_d3, _crossfilter); + } else { + this.dc = _dc(d3, crossfilter); + } +} +)(); //# sourceMappingURL=dc.js.map \ No newline at end of file diff --git a/dc.js.map b/dc.js.map index 945e2fa6d..be7ffa120 100644 --- a/dc.js.map +++ b/dc.js.map @@ -1 +1 @@ -{"version":3,"sources":["src/banner.js","src/core.js","src/errors.js","src/utils.js","src/logger.js","src/events.js","src/filters.js","src/base-mixin.js","src/margin-mixin.js","src/color-mixin.js","src/coordinate-grid-mixin.js","src/stack-mixin.js","src/cap-mixin.js","src/bubble-mixin.js","src/pie-chart.js","src/bar-chart.js","src/line-chart.js","src/data-count.js","src/data-table.js","src/data-grid.js","src/bubble-chart.js","src/composite-chart.js","src/series-chart.js","src/geo-choropleth-chart.js","src/bubble-overlay.js","src/row-chart.js","src/legend.js","src/scatter-plot.js","src/number-display.js","src/heatmap.js","src/d3.box.js","src/box-plot.js","src/select-menu.js","src/footer.js"],"names":[],"mappings":"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","file":"dc.js","sourcesContent":["(function() { function _dc(d3, crossfilter) {\n'use strict';\n","/**\n * The entire dc.js library is scoped under the **dc** name space. It does not introduce\n * anything else into the global name space.\n *\n * Most `dc` functions are designed to allow function chaining, meaning they return the current chart\n * instance whenever it is appropriate. The getter forms of functions do not participate in function\n * chaining because they necessarily return values that are not the chart. Although some,\n * such as `.svg` and `.xAxis`, return values that are chainable d3 objects.\n * @namespace dc\n * @version 2.1.0-dev\n * @example\n * // Example chaining\n * chart.width(300)\n * .height(300)\n * .filter('sunday');\n */\n/*jshint -W079*/\nvar dc = {\n version: '2.1.0-dev',\n constants: {\n CHART_CLASS: 'dc-chart',\n DEBUG_GROUP_CLASS: 'debug',\n STACK_CLASS: 'stack',\n DESELECTED_CLASS: 'deselected',\n SELECTED_CLASS: 'selected',\n NODE_INDEX_NAME: '__index__',\n GROUP_INDEX_NAME: '__group_index__',\n DEFAULT_CHART_GROUP: '__default_chart_group__',\n EVENT_DELAY: 40,\n NEGLIGIBLE_NUMBER: 1e-10\n },\n _renderlet: null\n};\n/*jshint +W079*/\n\ndc.chartRegistry = (function () {\n // chartGroup:string => charts:array\n var _chartMap = {};\n\n function initializeChartGroup (group) {\n if (!group) {\n group = dc.constants.DEFAULT_CHART_GROUP;\n }\n\n if (!_chartMap[group]) {\n _chartMap[group] = [];\n }\n\n return group;\n }\n\n return {\n has: function (chart) {\n for (var e in _chartMap) {\n if (_chartMap[e].indexOf(chart) >= 0) {\n return true;\n }\n }\n return false;\n },\n\n register: function (chart, group) {\n group = initializeChartGroup(group);\n _chartMap[group].push(chart);\n },\n\n deregister: function (chart, group) {\n group = initializeChartGroup(group);\n for (var i = 0; i < _chartMap[group].length; i++) {\n if (_chartMap[group][i].anchorName() === chart.anchorName()) {\n _chartMap[group].splice(i, 1);\n break;\n }\n }\n },\n\n clear: function (group) {\n if (group) {\n delete _chartMap[group];\n } else {\n _chartMap = {};\n }\n },\n\n list: function (group) {\n group = initializeChartGroup(group);\n return _chartMap[group];\n }\n };\n})();\n\ndc.registerChart = function (chart, group) {\n dc.chartRegistry.register(chart, group);\n};\n\ndc.deregisterChart = function (chart, group) {\n dc.chartRegistry.deregister(chart, group);\n};\n\ndc.hasChart = function (chart) {\n return dc.chartRegistry.has(chart);\n};\n\ndc.deregisterAllCharts = function (group) {\n dc.chartRegistry.clear(group);\n};\n\n/**\n * Clear all filters on all charts within the given chart group. If the chart group is not given then\n * only charts that belong to the default chart group will be reset.\n * @memberof dc\n * @name filterAll\n * @param {String} [group]\n */\ndc.filterAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n charts[i].filterAll();\n }\n};\n\n/**\n * Reset zoom level / focus on all charts that belong to the given chart group. If the chart group is\n * not given then only charts that belong to the default chart group will be reset.\n * @memberof dc\n * @name refocusAll\n * @param {String} [group]\n */\ndc.refocusAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n if (charts[i].focus) {\n charts[i].focus();\n }\n }\n};\n\n/**\n * Re-render all charts belong to the given chart group. If the chart group is not given then only\n * charts that belong to the default chart group will be re-rendered.\n * @memberof dc\n * @name renderAll\n * @param {String} [group]\n */\ndc.renderAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n charts[i].render();\n }\n\n if (dc._renderlet !== null) {\n dc._renderlet(group);\n }\n};\n\n/**\n * Redraw all charts belong to the given chart group. If the chart group is not given then only charts\n * that belong to the default chart group will be re-drawn. Redraw is different from re-render since\n * when redrawing dc tries to update the graphic incrementally, using transitions, instead of starting\n * from scratch.\n * @memberof dc\n * @name redrawAll\n * @param {String} [group]\n */\ndc.redrawAll = function (group) {\n var charts = dc.chartRegistry.list(group);\n for (var i = 0; i < charts.length; ++i) {\n charts[i].redraw();\n }\n\n if (dc._renderlet !== null) {\n dc._renderlet(group);\n }\n};\n\n/**\n * If this boolean is set truthy, all transitions will be disabled, and changes to the charts will happen\n * immediately\n * @memberof dc\n * @name disableTransitions\n * @type {Boolean}\n * @default false\n */\ndc.disableTransitions = false;\n\ndc.transition = function (selections, duration, callback, name) {\n if (duration <= 0 || duration === undefined || dc.disableTransitions) {\n return selections;\n }\n\n var s = selections\n .transition(name)\n .duration(duration);\n\n if (typeof(callback) === 'function') {\n callback(s);\n }\n\n return s;\n};\n\n/* somewhat silly, but to avoid duplicating logic */\ndc.optionalTransition = function (enable, duration, callback, name) {\n if (enable) {\n return function (selection) {\n return dc.transition(selection, duration, callback, name);\n };\n } else {\n return function (selection) {\n return selection;\n };\n }\n};\n\n/**\n * @name units\n * @memberof dc\n * @type {{}}\n */\ndc.units = {};\n\n/**\n * The default value for `xUnits` for the [Coordinate Grid Chart](#coordinate-grid-chart) and should\n * be used when the x values are a sequence of integers.\n * It is a function that counts the number of integers in the range supplied in its start and end parameters.\n * @name integers\n * @memberof dc.units\n * @example\n * chart.xUnits(dc.units.integers) // already the default\n * @param {Number} start\n * @param {Number} end\n * @returns {Number}\n */\ndc.units.integers = function (start, end) {\n return Math.abs(end - start);\n};\n\n/**\n * This argument can be passed to the `xUnits` function of the to specify ordinal units for the x\n * axis. Usually this parameter is used in combination with passing `d3.scale.ordinal()` to `.x`.\n * It just returns the domain passed to it, which for ordinal charts is an array of all values.\n * @name ordinal\n * @memberof dc.units\n * @example\n * chart.xUnits(dc.units.ordinal)\n * .x(d3.scale.ordinal())\n * @param {*} start\n * @param {*} end\n * @param {Array} domain\n * @returns {Array}\n */\ndc.units.ordinal = function (start, end, domain) {\n return domain;\n};\n\n/**\n * @name fp\n * @memberof dc.units\n * @type {{}}\n */\ndc.units.fp = {};\n/**\n * This function generates an argument for the [Coordinate Grid Chart's](#coordinate-grid-chart)\n * `xUnits` function specifying that the x values are floating-point numbers with the given\n * precision.\n * The returned function determines how many values at the given precision will fit into the range\n * supplied in its start and end parameters.\n * @name precision\n * @memberof dc.units.fp\n * @example\n * // specify values (and ticks) every 0.1 units\n * chart.xUnits(dc.units.fp.precision(0.1)\n * // there are 500 units between 0.5 and 1 if the precision is 0.001\n * var thousandths = dc.units.fp.precision(0.001);\n * thousandths(0.5, 1.0) // returns 500\n * @param {Number} precision\n * @returns {Function} start-end unit function\n */\ndc.units.fp.precision = function (precision) {\n var _f = function (s, e) {\n var d = Math.abs((e - s) / _f.resolution);\n if (dc.utils.isNegligible(d - Math.floor(d))) {\n return Math.floor(d);\n } else {\n return Math.ceil(d);\n }\n };\n _f.resolution = precision;\n return _f;\n};\n\ndc.round = {};\ndc.round.floor = function (n) {\n return Math.floor(n);\n};\ndc.round.ceil = function (n) {\n return Math.ceil(n);\n};\ndc.round.round = function (n) {\n return Math.round(n);\n};\n\ndc.override = function (obj, functionName, newFunction) {\n var existingFunction = obj[functionName];\n obj['_' + functionName] = existingFunction;\n obj[functionName] = newFunction;\n};\n\ndc.renderlet = function (_) {\n if (!arguments.length) {\n return dc._renderlet;\n }\n dc._renderlet = _;\n return dc;\n};\n\ndc.instanceOfChart = function (o) {\n return o instanceof Object && o.__dcFlag__ && true;\n};\n","dc.errors = {};\n\ndc.errors.Exception = function (msg) {\n var _msg = msg || 'Unexpected internal error';\n\n this.message = _msg;\n\n this.toString = function () {\n return _msg;\n };\n this.stack = (new Error()).stack;\n};\ndc.errors.Exception.prototype = Object.create(Error.prototype);\ndc.errors.Exception.prototype.constructor = dc.errors.Exception;\n\ndc.errors.InvalidStateException = function () {\n dc.errors.Exception.apply(this, arguments);\n};\n\ndc.errors.InvalidStateException.prototype = Object.create(dc.errors.Exception.prototype);\ndc.errors.InvalidStateException.prototype.constructor = dc.errors.InvalidStateException;\n\ndc.errors.BadArgumentException = function () {\n dc.errors.Exception.apply(this, arguments);\n};\n\ndc.errors.BadArgumentException.prototype = Object.create(dc.errors.Exception.prototype);\ndc.errors.BadArgumentException.prototype.constructor = dc.errors.BadArgumentException;\n","dc.dateFormat = d3.time.format('%m/%d/%Y');\n\ndc.printers = {};\n\ndc.printers.filters = function (filters) {\n var s = '';\n\n for (var i = 0; i < filters.length; ++i) {\n if (i > 0) {\n s += ', ';\n }\n s += dc.printers.filter(filters[i]);\n }\n\n return s;\n};\n\ndc.printers.filter = function (filter) {\n var s = '';\n\n if (typeof filter !== 'undefined' && filter !== null) {\n if (filter instanceof Array) {\n if (filter.length >= 2) {\n s = '[' + dc.utils.printSingleValue(filter[0]) + ' -> ' + dc.utils.printSingleValue(filter[1]) + ']';\n } else if (filter.length >= 1) {\n s = dc.utils.printSingleValue(filter[0]);\n }\n } else {\n s = dc.utils.printSingleValue(filter);\n }\n }\n\n return s;\n};\n\ndc.pluck = function (n, f) {\n if (!f) {\n return function (d) { return d[n]; };\n }\n return function (d, i) { return f.call(d, d[n], i); };\n};\n\ndc.utils = {};\n\ndc.utils.printSingleValue = function (filter) {\n var s = '' + filter;\n\n if (filter instanceof Date) {\n s = dc.dateFormat(filter);\n } else if (typeof(filter) === 'string') {\n s = filter;\n } else if (dc.utils.isFloat(filter)) {\n s = dc.utils.printSingleValue.fformat(filter);\n } else if (dc.utils.isInteger(filter)) {\n s = Math.round(filter);\n }\n\n return s;\n};\ndc.utils.printSingleValue.fformat = d3.format('.2f');\n\n// FIXME: these assume than any string r is a percentage (whether or not it\n// includes %). They also generate strange results if l is a string.\ndc.utils.add = function (l, r) {\n if (typeof r === 'string') {\n r = r.replace('%', '');\n }\n\n if (l instanceof Date) {\n if (typeof r === 'string') {\n r = +r;\n }\n var d = new Date();\n d.setTime(l.getTime());\n d.setDate(l.getDate() + r);\n return d;\n } else if (typeof r === 'string') {\n var percentage = (+r / 100);\n return l > 0 ? l * (1 + percentage) : l * (1 - percentage);\n } else {\n return l + r;\n }\n};\n\ndc.utils.subtract = function (l, r) {\n if (typeof r === 'string') {\n r = r.replace('%', '');\n }\n\n if (l instanceof Date) {\n if (typeof r === 'string') {\n r = +r;\n }\n var d = new Date();\n d.setTime(l.getTime());\n d.setDate(l.getDate() - r);\n return d;\n } else if (typeof r === 'string') {\n var percentage = (+r / 100);\n return l < 0 ? l * (1 + percentage) : l * (1 - percentage);\n } else {\n return l - r;\n }\n};\n\ndc.utils.isNumber = function (n) {\n return n === +n;\n};\n\ndc.utils.isFloat = function (n) {\n return n === +n && n !== (n | 0);\n};\n\ndc.utils.isInteger = function (n) {\n return n === +n && n === (n | 0);\n};\n\ndc.utils.isNegligible = function (n) {\n return !dc.utils.isNumber(n) || (n < dc.constants.NEGLIGIBLE_NUMBER && n > -dc.constants.NEGLIGIBLE_NUMBER);\n};\n\ndc.utils.clamp = function (val, min, max) {\n return val < min ? min : (val > max ? max : val);\n};\n\nvar _idCounter = 0;\ndc.utils.uniqueId = function () {\n return ++_idCounter;\n};\n\ndc.utils.nameToId = function (name) {\n return name.toLowerCase().replace(/[\\s]/g, '_').replace(/[\\.']/g, '');\n};\n\ndc.utils.appendOrSelect = function (parent, selector, tag) {\n tag = tag || selector;\n var element = parent.select(selector);\n if (element.empty()) {\n element = parent.append(tag);\n }\n return element;\n};\n\ndc.utils.safeNumber = function (n) { return dc.utils.isNumber(+n) ? +n : 0;};\n","dc.logger = {};\n\ndc.logger.enableDebugLog = false;\n\ndc.logger.warn = function (msg) {\n if (console) {\n if (console.warn) {\n console.warn(msg);\n } else if (console.log) {\n console.log(msg);\n }\n }\n\n return dc.logger;\n};\n\ndc.logger.debug = function (msg) {\n if (dc.logger.enableDebugLog && console) {\n if (console.debug) {\n console.debug(msg);\n } else if (console.log) {\n console.log(msg);\n }\n }\n\n return dc.logger;\n};\n\ndc.logger.deprecate = function (fn, msg) {\n // Allow logging of deprecation\n var warned = false;\n function deprecated () {\n if (!warned) {\n dc.logger.warn(msg);\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n return deprecated;\n};\n","dc.events = {\n current: null\n};\n\n/**\n * This function triggers a throttled event function with a specified delay (in milli-seconds). Events\n * that are triggered repetitively due to user interaction such brush dragging might flood the library\n * and invoke more renders than can be executed in time. Using this function to wrap your event\n * function allows the library to smooth out the rendering by throttling events and only responding to\n * the most recent event.\n * @name events.trigger\n * @memberof dc\n * @example\n * chart.on('renderlet', function(chart) {\n * // smooth the rendering through event throttling\n * dc.events.trigger(function(){\n * // focus some other chart to the range selected by user on this chart\n * someOtherChart.focus(chart.filter());\n * });\n * })\n * @param {Function} closure\n * @param {Number} [delay]\n */\ndc.events.trigger = function (closure, delay) {\n if (!delay) {\n closure();\n return;\n }\n\n dc.events.current = closure;\n\n setTimeout(function () {\n if (closure === dc.events.current) {\n closure();\n }\n }, delay);\n};\n","/**\n * The dc.js filters are functions which are passed into crossfilter to chose which records will be\n * accumulated to produce values for the charts. In the crossfilter model, any filters applied on one\n * dimension will affect all the other dimensions but not that one. dc always applies a filter\n * function to the dimension; the function combines multiple filters and if any of them accept a\n * record, it is filtered in.\n *\n * These filter constructors are used as appropriate by the various charts to implement brushing. We\n * mention below which chart uses which filter. In some cases, many instances of a filter will be added.\n *\n * Each of the dc.js filters is an object with the following properties:\n * * `isFiltered` - a function that returns true if a value is within the filter\n * * `filterType` - a string identifying the filter, here the name of the constructor\n *\n * Currently these filter objects are also arrays, but this is not a requirement. Custom filters\n * can be used as long as they have the properties above.\n * @name filters\n * @memberof dc\n * @type {{}}\n */\ndc.filters = {};\n\n/**\n * RangedFilter is a filter which accepts keys between `low` and `high`. It is used to implement X\n * axis brushing for the [coordinate grid charts](#coordinate-grid-mixin).\n *\n * Its `filterType` is 'RangedFilter'\n * @name RangedFilter\n * @memberof dc.filters\n * @param {Number} low\n * @param {Number} high\n * @returns {Array}\n * @constructor\n */\ndc.filters.RangedFilter = function (low, high) {\n var range = new Array(low, high);\n range.isFiltered = function (value) {\n return value >= this[0] && value < this[1];\n };\n range.filterType = 'RangedFilter';\n\n return range;\n};\n\n/**\n * TwoDimensionalFilter is a filter which accepts a single two-dimensional value. It is used by the\n * [heat map chart](#heat-map) to include particular cells as they are clicked. (Rows and columns are\n * filtered by filtering all the cells in the row or column.)\n *\n * Its `filterType` is 'TwoDimensionalFilter'\n * @name TwoDimensionalFilter\n * @memberof dc.filters\n * @param {Array} filter\n * @returns {Array}\n * @constructor\n */\ndc.filters.TwoDimensionalFilter = function (filter) {\n if (filter === null) { return null; }\n\n var f = filter;\n f.isFiltered = function (value) {\n return value.length && value.length === f.length &&\n value[0] === f[0] && value[1] === f[1];\n };\n f.filterType = 'TwoDimensionalFilter';\n\n return f;\n};\n\n/**\n * The RangedTwoDimensionalFilter allows filtering all values which fit within a rectangular\n * region. It is used by the [scatter plot](#scatter-plot) to implement rectangular brushing.\n *\n * It takes two two-dimensional points in the form `[[x1,y1],[x2,y2]]`, and normalizes them so that\n * `x1 <= x2` and `y1 <- y2`. It then returns a filter which accepts any points which are in the\n * rectangular range including the lower values but excluding the higher values.\n *\n * If an array of two values are given to the RangedTwoDimensionalFilter, it interprets the values as\n * two x coordinates `x1` and `x2` and returns a filter which accepts any points for which `x1 <= x <\n * x2`.\n *\n * Its `filterType` is 'RangedTwoDimensionalFilter'\n * @name RangedTwoDimensionalFilter\n * @memberof dc.filters\n * @param {Array>} filter\n * @returns {Array>}\n * @constructor\n */\ndc.filters.RangedTwoDimensionalFilter = function (filter) {\n if (filter === null) { return null; }\n\n var f = filter;\n var fromBottomLeft;\n\n if (f[0] instanceof Array) {\n fromBottomLeft = [\n [Math.min(filter[0][0], filter[1][0]), Math.min(filter[0][1], filter[1][1])],\n [Math.max(filter[0][0], filter[1][0]), Math.max(filter[0][1], filter[1][1])]\n ];\n } else {\n fromBottomLeft = [[filter[0], -Infinity], [filter[1], Infinity]];\n }\n\n f.isFiltered = function (value) {\n var x, y;\n\n if (value instanceof Array) {\n if (value.length !== 2) {\n return false;\n }\n x = value[0];\n y = value[1];\n } else {\n x = value;\n y = fromBottomLeft[0][1];\n }\n\n return x >= fromBottomLeft[0][0] && x < fromBottomLeft[1][0] &&\n y >= fromBottomLeft[0][1] && y < fromBottomLeft[1][1];\n };\n f.filterType = 'RangedTwoDimensionalFilter';\n\n return f;\n};\n","/**\n * `dc.baseMixin` is an abstract functional object representing a basic `dc` chart object\n * for all chart and widget implementations. Methods from the `dc.baseMixin` are inherited\n * and available on all chart implementations in the `dc` library.\n * @name baseMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @return {dc.baseMixin}\n */\ndc.baseMixin = function (_chart) {\n _chart.__dcFlag__ = dc.utils.uniqueId();\n\n var _dimension;\n var _group;\n\n var _anchor;\n var _root;\n var _svg;\n var _isChild;\n\n var _minWidth = 200;\n var _defaultWidth = function (element) {\n var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width;\n return (width && width > _minWidth) ? width : _minWidth;\n };\n var _width = _defaultWidth;\n\n var _minHeight = 200;\n var _defaultHeight = function (element) {\n var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height;\n return (height && height > _minHeight) ? height : _minHeight;\n };\n var _height = _defaultHeight;\n\n var _keyAccessor = dc.pluck('key');\n var _valueAccessor = dc.pluck('value');\n var _label = dc.pluck('key');\n\n var _ordering = dc.pluck('key');\n var _orderSort;\n\n var _renderLabel = false;\n\n var _title = function (d) {\n return _chart.keyAccessor()(d) + ': ' + _chart.valueAccessor()(d);\n };\n var _renderTitle = true;\n var _controlsUseVisibility = true;\n\n var _transitionDuration = 750;\n\n var _filterPrinter = dc.printers.filters;\n\n var _mandatoryAttributes = ['dimension', 'group'];\n\n var _chartGroup = dc.constants.DEFAULT_CHART_GROUP;\n\n var _listeners = d3.dispatch(\n 'preRender',\n 'postRender',\n 'preRedraw',\n 'postRedraw',\n 'filtered',\n 'zoomed',\n 'renderlet',\n 'pretransition');\n\n var _legend;\n\n var _filters = [];\n var _filterHandler = function (dimension, filters) {\n if (filters.length === 0) {\n dimension.filter(null);\n } else if (filters.length === 1 && !filters[0].isFiltered) {\n // single value and not a function-based filter\n dimension.filterExact(filters[0]);\n } else if (filters.length === 1 && filters[0].filterType === 'RangedFilter') {\n // single range-based filter\n dimension.filterRange(filters[0]);\n } else {\n dimension.filterFunction(function (d) {\n for (var i = 0; i < filters.length; i++) {\n var filter = filters[i];\n if (filter.isFiltered && filter.isFiltered(d)) {\n return true;\n } else if (filter <= d && filter >= d) {\n return true;\n }\n }\n return false;\n });\n }\n return filters;\n };\n\n var _data = function (group) {\n return group.all();\n };\n\n /**\n * Set or get the height attribute of a chart. The height is applied to the SVGElement generated by\n * the chart when rendered (or re-rendered). If a value is given, then it will be used to calculate\n * the new height and the chart returned for method chaining. The value can either be a numeric, a\n * function, or falsy. If no value is specified then the value of the current height attribute will\n * be returned.\n *\n * By default, without an explicit height being given, the chart will select the width of its\n * anchor element. If that isn't possible it defaults to 200 (provided by the\n * {@link #dc.baseMixin.minHeight minHeight} property). Setting the value falsy will return\n * the chart to the default behavior.\n * @name height\n * @memberof dc.baseMixin\n * @instance\n * @see {@link #dc.baseMixin+minHeight minHeight}\n * @example\n * // Default height\n * chart.height(function (element) {\n * var height = element && element.getBoundingClientRect && element.getBoundingClientRect().height;\n * return (height && height > chart.minHeight()) ? height : chart.minHeight();\n * });\n *\n * chart.height(250); // Set the chart's height to 250px;\n * chart.height(function(anchor) { return doSomethingWith(anchor); }); // set the chart's height with a function\n * chart.height(null); // reset the height to the default auto calculation\n * @param {Number|Function} [height]\n * @return {Number}\n * @return {dc.baseMixin}\n */\n _chart.height = function (height) {\n if (!arguments.length) {\n return _height(_root.node());\n }\n _height = d3.functor(height || _defaultHeight);\n return _chart;\n };\n\n /**\n * Set or get the width attribute of a chart.\n * @name width\n * @memberof dc.baseMixin\n * @instance\n * @see {@link #dc.baseMixin+height height}\n * @see {@link #dc.baseMixin+minWidth minWidth}\n * @example\n * // Default width\n * chart.width(function (element) {\n * var width = element && element.getBoundingClientRect && element.getBoundingClientRect().width;\n * return (width && width > chart.minWidth()) ? width : chart.minWidth();\n * });\n * @param {Number|Function} [width]\n * @return {Number}\n * @return {dc.baseMixin}\n */\n _chart.width = function (width) {\n if (!arguments.length) {\n return _width(_root.node());\n }\n _width = d3.functor(width || _defaultWidth);\n return _chart;\n };\n\n /**\n * Set or get the minimum width attribute of a chart. This only has effect when used with the default `width` function.\n * @name minWidth\n * @memberof dc.baseMixin\n * @instance\n * @see {@link #dc.baseMixin+width width}\n * @param {Number} [minWidth=200]\n * @return {Number}\n * @return {dc.baseMixin}\n */\n _chart.minWidth = function (minWidth) {\n if (!arguments.length) {\n return _minWidth;\n }\n _minWidth = minWidth;\n return _chart;\n };\n\n /**\n * Set or get the minimum height attribute of a chart. This only has effect when used with the default `height` function.\n * @name minHeight\n * @memberof dc.baseMixin\n * @instance\n * @see {@link #dc.baseMixin+height height}\n * @param {Number} [minHeight=200]\n * @return {Number}\n * @return {dc.baseMixin}\n */\n _chart.minHeight = function (minHeight) {\n if (!arguments.length) {\n return _minHeight;\n }\n _minHeight = minHeight;\n return _chart;\n };\n\n /**\n * **mandatory**\n *\n * Set or get the dimension attribute of a chart. In `dc`, a dimension can be any valid [crossfilter\n * dimension](https://github.com/square/crossfilter/wiki/API-Reference#wiki-dimension).\n *\n * If a value is given, then it will be used as the new dimension. If no value is specified then\n * the current dimension will be returned.\n * @name dimension\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/square/crossfilter/wiki/API-Reference#dimension crossfilter.dimension}\n * @example\n * var index = crossfilter([]);\n * var dimension = index.dimension(dc.pluck('key'));\n * chart.dimension(dimension);\n * @param {crossfilter.dimension} [dimension]\n * @return {crossfilter.dimension}\n * @return {dc.baseMixin}\n */\n _chart.dimension = function (dimension) {\n if (!arguments.length) {\n return _dimension;\n }\n _dimension = dimension;\n _chart.expireCache();\n return _chart;\n };\n\n /**\n * Set the data callback or retrieve the chart's data set. The data callback is passed the chart's\n * group and by default will return `group.all()`. This behavior may be modified to, for instance,\n * return only the top 5 groups.\n * @name data\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // Default data function\n * chart.data(function (group) { return group.all(); });\n *\n * chart.data(function (group) { return group.top(5); });\n * @param {Function} [callback]\n * @return {*}\n * @return {dc.baseMixin}\n */\n _chart.data = function (callback) {\n if (!arguments.length) {\n return _data.call(_chart, _group);\n }\n _data = d3.functor(callback);\n _chart.expireCache();\n return _chart;\n };\n\n /**\n * **mandatory**\n *\n * Set or get the group attribute of a chart. In `dc` a group is a [crossfilter\n * group](https://github.com/square/crossfilter/wiki/API-Reference#group-map-reduce). Usually the group\n * should be created from the particular dimension associated with the same chart. If a value is\n * given, then it will be used as the new group.\n *\n * If no value specified then the current group will be returned.\n * If `name` is specified then it will be used to generate legend label.\n * @name group\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/square/crossfilter/wiki/API-Reference#group-map-reduce crossfilter.group}\n * @example\n * var index = crossfilter([]);\n * var dimension = index.dimension(dc.pluck('key'));\n * chart.dimension(dimension);\n * chart.group(dimension.group(crossfilter.reduceSum()));\n * @param {crossfilter.group} [group]\n * @param {String} [name]\n * @return {crossfilter.group}\n * @return {dc.baseMixin}\n */\n _chart.group = function (group, name) {\n if (!arguments.length) {\n return _group;\n }\n _group = group;\n _chart._groupName = name;\n _chart.expireCache();\n return _chart;\n };\n\n /**\n * Get or set an accessor to order ordinal dimensions. This uses `crossfilter.quicksort.by` as the\n * sort.\n * @name ordering\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/square/crossfilter/wiki/API-Reference#quicksort_by crossfilter.quicksort.by}\n * @example\n * // Default ordering accessor\n * _chart.ordering(dc.pluck('key'));\n * @param {Function} [orderFunction]\n * @return {Function}\n * @return {dc.baseMixin}\n */\n _chart.ordering = function (orderFunction) {\n if (!arguments.length) {\n return _ordering;\n }\n _ordering = orderFunction;\n _orderSort = crossfilter.quicksort.by(_ordering);\n _chart.expireCache();\n return _chart;\n };\n\n _chart._computeOrderedGroups = function (data) {\n var dataCopy = data.slice(0);\n\n if (dataCopy.length <= 1) {\n return dataCopy;\n }\n\n if (!_orderSort) {\n _orderSort = crossfilter.quicksort.by(_ordering);\n }\n\n return _orderSort(dataCopy, 0, dataCopy.length);\n };\n\n /**\n * Clear all filters associated with this chart\n *\n * The same can be achieved by calling `chart.filter(null)`.\n * @name filterAll\n * @memberof dc.baseMixin\n * @instance\n * @return {dc.baseMixin}\n */\n _chart.filterAll = function () {\n return _chart.filter(null);\n };\n\n /**\n * Execute d3 single selection in the chart's scope using the given selector and return the d3\n * selection.\n *\n * This function is **not chainable** since it does not return a chart instance; however the d3\n * selection result can be chained to d3 function calls.\n * @name select\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/mbostock/d3/wiki/Selections d3.selection}\n * @example\n * // Similar to:\n * d3.select('#chart-id').select(selector);\n * @return {d3.selection}\n */\n _chart.select = function (s) {\n return _root.select(s);\n };\n\n /**\n * Execute in scope d3 selectAll using the given selector and return d3 selection result.\n *\n * This function is **not chainable** since it does not return a chart instance; however the d3\n * selection result can be chained to d3 function calls.\n * @name selectAll\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/mbostock/d3/wiki/Selections d3.selection}\n * @example\n * // Similar to:\n * d3.select('#chart-id').selectAll(selector);\n * @return {d3.selection}\n */\n _chart.selectAll = function (s) {\n return _root ? _root.selectAll(s) : null;\n };\n\n /**\n * Set the root SVGElement to either be an existing chart's root; or any valid [d3 single\n * selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying a dom\n * block element such as a div; or a dom element or d3 selection. Optionally registers the chart\n * within the chartGroup. This class is called internally on chart initialization, but be called\n * again to relocate the chart. However, it will orphan any previously created SVGElements.\n * @name anchor\n * @memberof dc.baseMixin\n * @instance\n * @param {anchorChart|anchorSelector|anchorNode} [parent]\n * @param {String} [chartGroup]\n * @return {String|node|d3.selection}\n * @return {dc.baseMixin}\n */\n _chart.anchor = function (parent, chartGroup) {\n if (!arguments.length) {\n return _anchor;\n }\n if (dc.instanceOfChart(parent)) {\n _anchor = parent.anchor();\n _root = parent.root();\n _isChild = true;\n } else if (parent) {\n if (parent.select && parent.classed) { // detect d3 selection\n _anchor = parent.node();\n } else {\n _anchor = parent;\n }\n _root = d3.select(_anchor);\n _root.classed(dc.constants.CHART_CLASS, true);\n dc.registerChart(_chart, chartGroup);\n _isChild = false;\n } else {\n throw new dc.errors.BadArgumentException('parent must be defined');\n }\n _chartGroup = chartGroup;\n return _chart;\n };\n\n /**\n * Returns the DOM id for the chart's anchored location.\n * @name anchorName\n * @memberof dc.baseMixin\n * @instance\n * @return {String}\n */\n _chart.anchorName = function () {\n var a = _chart.anchor();\n if (a && a.id) {\n return a.id;\n }\n if (a && a.replace) {\n return a.replace('#', '');\n }\n return 'dc-chart' + _chart.chartID();\n };\n\n /**\n * Returns the root element where a chart resides. Usually it will be the parent div element where\n * the SVGElement was created. You can also pass in a new root element however this is usually handled by\n * dc internally. Resetting the root element on a chart outside of dc internals may have\n * unexpected consequences.\n * @name root\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement HTMLElement}\n * @param {HTMLElement} [rootElement]\n * @return {HTMLElement}\n * @return {dc.baseMixin}\n */\n _chart.root = function (rootElement) {\n if (!arguments.length) {\n return _root;\n }\n _root = rootElement;\n return _chart;\n };\n\n /**\n * Returns the top SVGElement for this specific chart. You can also pass in a new SVGElement,\n * however this is usually handled by dc internally. Resetting the SVGElement on a chart outside\n * of dc internals may have unexpected consequences.\n * @name svg\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SVGElement SVGElement}\n * @param {SVGElement} [svgElement]\n * @return {SVGElement}\n * @return {dc.baseMixin}\n */\n _chart.svg = function (svgElement) {\n if (!arguments.length) {\n return _svg;\n }\n _svg = svgElement;\n return _chart;\n };\n\n /**\n * Remove the chart's SVGElements from the dom and recreate the container SVGElement.\n * @name resetSvg\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/SVGElement SVGElement}\n * @return {SVGElement}\n */\n _chart.resetSvg = function () {\n _chart.select('svg').remove();\n return generateSvg();\n };\n\n function sizeSvg () {\n if (_svg) {\n _svg\n .attr('width', _chart.width())\n .attr('height', _chart.height());\n }\n }\n\n function generateSvg () {\n _svg = _chart.root().append('svg');\n sizeSvg();\n return _svg;\n }\n\n /**\n * Set or get the filter printer function. The filter printer function is used to generate human\n * friendly text for filter value(s) associated with the chart instance. By default dc charts use a\n * default filter printer `dc.printers.filter` that provides simple printing support for both\n * single value and ranged filters.\n * @name filterPrinter\n * @memberof dc.baseMixin\n * @instance\n * @param {Function} [filterPrinterFunction=dc.printers.filter]\n * @return {Function}\n * @return {dc.baseMixin}\n */\n _chart.filterPrinter = function (filterPrinterFunction) {\n if (!arguments.length) {\n return _filterPrinter;\n }\n _filterPrinter = filterPrinterFunction;\n return _chart;\n };\n\n /**\n * If set, use the `visibility` attribute instead of the `display` attribute for showing/hiding\n * chart reset and filter controls, for less disruption to the layout.\n * @name controlsUseVisibility\n * @memberof dc.baseMixin\n * @instance\n * @param {Boolean} useVisibility\n * @return {Boolean}\n * @return {dc.baseMixin}\n **/\n _chart.controlsUseVisibility = function (useVisibility) {\n if (!arguments.length) {\n return _controlsUseVisibility;\n }\n _controlsUseVisibility = useVisibility;\n return _chart;\n };\n\n /**\n * Turn on optional control elements within the root element. dc currently supports the\n * following html control elements.\n * * root.selectAll('.reset') - elements are turned on if the chart has an active filter. This type\n * of control element is usually used to store a reset link to allow user to reset filter on a\n * certain chart. This element will be turned off automatically if the filter is cleared.\n * * root.selectAll('.filter') elements are turned on if the chart has an active filter. The text\n * content of this element is then replaced with the current filter value using the filter printer\n * function. This type of element will be turned off automatically if the filter is cleared.\n * @name turnOnControls\n * @memberof dc.baseMixin\n * @instance\n * @return {dc.baseMixin}\n */\n _chart.turnOnControls = function () {\n if (_root) {\n var attribute = _chart.controlsUseVisibility() ? 'visibility' : 'display';\n _chart.selectAll('.reset').style(attribute, null);\n _chart.selectAll('.filter').text(_filterPrinter(_chart.filters())).style(attribute, null);\n }\n return _chart;\n };\n\n /**\n * Turn off optional control elements within the root element.\n * @name turnOffControls\n * @memberof dc.baseMixin\n * @see {@link #dc.baseMixin+turnOnControls turnOnControls}\n * @instance\n * @return {dc.baseMixin}\n */\n _chart.turnOffControls = function () {\n if (_root) {\n var attribute = _chart.controlsUseVisibility() ? 'visibility' : 'display';\n var value = _chart.controlsUseVisibility() ? 'hidden' : 'none';\n _chart.selectAll('.reset').style(attribute, value);\n _chart.selectAll('.filter').style(attribute, value).text(_chart.filter());\n }\n return _chart;\n };\n\n /**\n * Set or get the animation transition duration (in milliseconds) for this chart instance.\n * @name transitionDuration\n * @memberof dc.baseMixin\n * @instance\n * @param {Number} [duration=750]\n * @return {Number}\n * @return {dc.baseMixin}\n */\n _chart.transitionDuration = function (duration) {\n if (!arguments.length) {\n return _transitionDuration;\n }\n _transitionDuration = duration;\n return _chart;\n };\n\n _chart._mandatoryAttributes = function (_) {\n if (!arguments.length) {\n return _mandatoryAttributes;\n }\n _mandatoryAttributes = _;\n return _chart;\n };\n\n function checkForMandatoryAttributes (a) {\n if (!_chart[a] || !_chart[a]()) {\n throw new dc.errors.InvalidStateException('Mandatory attribute chart.' + a +\n ' is missing on chart[#' + _chart.anchorName() + ']');\n }\n }\n\n /**\n * Invoking this method will force the chart to re-render everything from scratch. Generally it\n * should only be used to render the chart for the first time on the page or if you want to make\n * sure everything is redrawn from scratch instead of relying on the default incremental redrawing\n * behaviour.\n * @name render\n * @memberof dc.baseMixin\n * @instance\n * @return {dc.baseMixin}\n */\n _chart.render = function () {\n _listeners.preRender(_chart);\n\n if (_mandatoryAttributes) {\n _mandatoryAttributes.forEach(checkForMandatoryAttributes);\n }\n\n var result = _chart._doRender();\n\n if (_legend) {\n _legend.render();\n }\n\n _chart._activateRenderlets('postRender');\n\n return result;\n };\n\n _chart._activateRenderlets = function (event) {\n _listeners.pretransition(_chart);\n if (_chart.transitionDuration() > 0 && _svg) {\n _svg.transition().duration(_chart.transitionDuration())\n .each('end', function () {\n _listeners.renderlet(_chart);\n if (event) {\n _listeners[event](_chart);\n }\n });\n } else {\n _listeners.renderlet(_chart);\n if (event) {\n _listeners[event](_chart);\n }\n }\n };\n\n /**\n * Calling redraw will cause the chart to re-render data changes incrementally. If there is no\n * change in the underlying data dimension then calling this method will have no effect on the\n * chart. Most chart interaction in dc will automatically trigger this method through internal\n * events (in particular [dc.redrawAll](#dcredrawallchartgroup)); therefore, you only need to\n * manually invoke this function if data is manipulated outside of dc's control (for example if\n * data is loaded in the background using `crossfilter.add()`).\n * @name redraw\n * @memberof dc.baseMixin\n * @instance\n * @return {dc.baseMixin}\n */\n _chart.redraw = function () {\n sizeSvg();\n _listeners.preRedraw(_chart);\n\n var result = _chart._doRedraw();\n\n if (_legend) {\n _legend.render();\n }\n\n _chart._activateRenderlets('postRedraw');\n\n return result;\n };\n\n _chart.redrawGroup = function () {\n dc.redrawAll(_chart.chartGroup());\n };\n\n _chart.renderGroup = function () {\n dc.renderAll(_chart.chartGroup());\n };\n\n _chart._invokeFilteredListener = function (f) {\n if (f !== undefined) {\n _listeners.filtered(_chart, f);\n }\n };\n\n _chart._invokeZoomedListener = function () {\n _listeners.zoomed(_chart);\n };\n\n var _hasFilterHandler = function (filters, filter) {\n if (filter === null || typeof(filter) === 'undefined') {\n return filters.length > 0;\n }\n return filters.some(function (f) {\n return filter <= f && filter >= f;\n });\n };\n\n /**\n * Set or get the has filter handler. The has filter handler is a function that checks to see if\n * the chart's current filters include a specific filter. Using a custom has filter handler allows\n * you to change the way filters are checked for and replaced.\n * @name hasFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default has filter handler\n * chart.hasFilterHandler(function (filters, filter) {\n * if (filter === null || typeof(filter) === 'undefined') {\n * return filters.length > 0;\n * }\n * return filters.some(function (f) {\n * return filter <= f && filter >= f;\n * });\n * });\n *\n * // custom filter handler (no-op)\n * chart.hasFilterHandler(function(filters, filter) {\n * return false;\n * });\n * @param {Function} [hasFilterHandler]\n * @return {Function}\n * @return {dc.baseMixin}\n */\n _chart.hasFilterHandler = function (hasFilterHandler) {\n if (!arguments.length) {\n return _hasFilterHandler;\n }\n _hasFilterHandler = hasFilterHandler;\n return _chart;\n };\n\n /**\n * Check whether any active filter or a specific filter is associated with particular chart instance.\n * This function is **not chainable**.\n * @name hasFilter\n * @memberof dc.baseMixin\n * @instance\n * @see {@link #dc.baseMixin+hasFilterHandler hasFilterHandler}\n * @param {*} [filter]\n * @return {Boolean}\n */\n _chart.hasFilter = function (filter) {\n return _hasFilterHandler(_filters, filter);\n };\n\n var _removeFilterHandler = function (filters, filter) {\n for (var i = 0; i < filters.length; i++) {\n if (filters[i] <= filter && filters[i] >= filter) {\n filters.splice(i, 1);\n break;\n }\n }\n return filters;\n };\n\n /**\n * Set or get the remove filter handler. The remove filter handler is a function that removes a\n * filter from the chart's current filters. Using a custom remove filter handler allows you to\n * change how filters are removed or perform additional work when removing a filter, e.g. when\n * using a filter server other than crossfilter.\n *\n * Any changes should modify the `filters` array argument and return that array.\n * @name removeFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default remove filter handler\n * chart.removeFilterHandler(function (filters, filter) {\n * for (var i = 0; i < filters.length; i++) {\n * if (filters[i] <= filter && filters[i] >= filter) {\n * filters.splice(i, 1);\n * break;\n * }\n * }\n * return filters;\n * });\n *\n * // custom filter handler (no-op)\n * chart.removeFilterHandler(function(filters, filter) {\n * return filters;\n * });\n * @param {Function} [removeFilterHandler]\n * @return {Function}\n * @return {dc.baseMixin}\n */\n _chart.removeFilterHandler = function (removeFilterHandler) {\n if (!arguments.length) {\n return _removeFilterHandler;\n }\n _removeFilterHandler = removeFilterHandler;\n return _chart;\n };\n\n var _addFilterHandler = function (filters, filter) {\n filters.push(filter);\n return filters;\n };\n\n /**\n * Set or get the add filter handler. The add filter handler is a function that adds a filter to\n * the chart's filter list. Using a custom add filter handler allows you to change the way filters\n * are added or perform additional work when adding a filter, e.g. when using a filter server other\n * than crossfilter.\n *\n * Any changes should modify the `filters` array argument and return that array.\n * @name addFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default add filter handler\n * chart.addFilterHandler(function (filters, filter) {\n * filters.push(filter);\n * return filters;\n * });\n *\n * // custom filter handler (no-op)\n * chart.addFilterHandler(function(filters, filter) {\n * return filters;\n * });\n * @param {Function} [addFilterHandler]\n * @return {Function}\n * @return {dc.baseMixin}\n */\n _chart.addFilterHandler = function (addFilterHandler) {\n if (!arguments.length) {\n return _addFilterHandler;\n }\n _addFilterHandler = addFilterHandler;\n return _chart;\n };\n\n var _resetFilterHandler = function (filters) {\n return [];\n };\n\n /**\n * Set or get the reset filter handler. The reset filter handler is a function that resets the\n * chart's filter list by returning a new list. Using a custom reset filter handler allows you to\n * change the way filters are reset, or perform additional work when resetting the filters,\n * e.g. when using a filter server other than crossfilter.\n *\n * This function should return an array.\n * @name resetFilterHandler\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default remove filter handler\n * function (filters) {\n * return [];\n * }\n *\n * // custom filter handler (no-op)\n * chart.resetFilterHandler(function(filters) {\n * return filters;\n * });\n * @param {Function} [resetFilterHandler]\n * @return {dc.baseMixin}\n */\n _chart.resetFilterHandler = function (resetFilterHandler) {\n if (!arguments.length) {\n return _resetFilterHandler;\n }\n _resetFilterHandler = resetFilterHandler;\n return _chart;\n };\n\n function applyFilters () {\n if (_chart.dimension() && _chart.dimension().filter) {\n var fs = _filterHandler(_chart.dimension(), _filters);\n _filters = fs ? fs : _filters;\n }\n }\n\n _chart.replaceFilter = function (_) {\n _filters = [];\n _chart.filter(_);\n };\n\n /**\n * Filter the chart by the given value or return the current filter if the input parameter is missing.\n * If the passed filter is not currently in the chart's filters, it is added to the filters by the\n * {@link #dc.baseMixin+addFilterHandler addFilterHandler}. If a filter exists already within the chart's\n * filters, it will be removed by the {@link #dc.baseMixin+removeFilterHandler removeFilterHandler}. If\n * a `null` value was passed at the filter, this denotes that the filters should be reset, and is performed\n * by the {@link #dc.baseMixin+resetFilterHandler resetFilterHandler}.\n *\n * Once the filters array has been updated, the filters are applied to the crossfilter.dimension, using the\n * {@link #dc.baseMixin+filterHandler filterHandler}.\n * @name filter\n * @memberof dc.baseMixin\n * @instance\n * @see {@link #dc.baseMixin+addFilterHandler addFilterHandler}\n * @see {@link #dc.baseMixin+removeFilterHandler removeFilterHandler}\n * @see {@link #dc.baseMixin+resetFilterHandler resetFilterHandler}\n * @see {@link #dc.baseMixin+filterHandler filterHandler}\n * @example\n * // filter by a single string\n * chart.filter('Sunday');\n * // filter by a single age\n * chart.filter(18);\n * @param {*} [filter]\n * @return {dc.baseMixin}\n */\n _chart.filter = function (filter) {\n if (!arguments.length) {\n return _filters.length > 0 ? _filters[0] : null;\n }\n if (filter instanceof Array && filter[0] instanceof Array && !filter.isFiltered) {\n filter[0].forEach(function (d) {\n if (_chart.hasFilter(d)) {\n _removeFilterHandler(_filters, d);\n } else {\n _addFilterHandler(_filters, d);\n }\n });\n } else if (filter === null) {\n _filters = _resetFilterHandler(_filters);\n } else {\n if (_chart.hasFilter(filter)) {\n _removeFilterHandler(_filters, filter);\n } else {\n _addFilterHandler(_filters, filter);\n }\n }\n applyFilters();\n _chart._invokeFilteredListener(filter);\n\n if (_root !== null && _chart.hasFilter()) {\n _chart.turnOnControls();\n } else {\n _chart.turnOffControls();\n }\n\n return _chart;\n };\n\n /**\n * Returns all current filters. This method does not perform defensive cloning of the internal\n * filter array before returning, therefore any modification of the returned array will effect the\n * chart's internal filter storage.\n * @name filters\n * @memberof dc.baseMixin\n * @instance\n * @return {Array<*>}\n */\n _chart.filters = function () {\n return _filters;\n };\n\n _chart.highlightSelected = function (e) {\n d3.select(e).classed(dc.constants.SELECTED_CLASS, true);\n d3.select(e).classed(dc.constants.DESELECTED_CLASS, false);\n };\n\n _chart.fadeDeselected = function (e) {\n d3.select(e).classed(dc.constants.SELECTED_CLASS, false);\n d3.select(e).classed(dc.constants.DESELECTED_CLASS, true);\n };\n\n _chart.resetHighlight = function (e) {\n d3.select(e).classed(dc.constants.SELECTED_CLASS, false);\n d3.select(e).classed(dc.constants.DESELECTED_CLASS, false);\n };\n\n /**\n * This function is passed to d3 as the onClick handler for each chart. The default behavior is to\n * filter on the clicked datum (passed to the callback) and redraw the chart group.\n * @name onClick\n * @memberof dc.baseMixin\n * @instance\n * @param {*} datum\n */\n _chart.onClick = function (datum) {\n var filter = _chart.keyAccessor()(datum);\n dc.events.trigger(function () {\n _chart.filter(filter);\n _chart.redrawGroup();\n });\n };\n\n /**\n * Set or get the filter handler. The filter handler is a function that performs the filter action\n * on a specific dimension. Using a custom filter handler allows you to perform additional logic\n * before or after filtering.\n * @name filterHandler\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/square/crossfilter/wiki/API-Reference#dimension_filter crossfilter.dimension.filter}\n * @example\n * // default filter handler\n * chart.filterHandler(function (dimension, filters) {\n * dimension.filter(null);\n * if (filters.length === 0) {\n * dimension.filter(null);\n * } else {\n * dimension.filterFunction(function (d) {\n * for (var i = 0; i < filters.length; i++) {\n * var filter = filters[i];\n * if (filter.isFiltered && filter.isFiltered(d)) {\n * return true;\n * } else if (filter <= d && filter >= d) {\n * return true;\n * }\n * }\n * return false;\n * });\n * }\n * return filters;\n * });\n *\n * // custom filter handler\n * chart.filterHandler(function(dimension, filter){\n * var newFilter = filter + 10;\n * dimension.filter(newFilter);\n * return newFilter; // set the actual filter value to the new value\n * });\n * @param {Function} [filterHandler]\n * @return {Function}\n * @return {dc.baseMixin}\n */\n _chart.filterHandler = function (filterHandler) {\n if (!arguments.length) {\n return _filterHandler;\n }\n _filterHandler = filterHandler;\n return _chart;\n };\n\n // abstract function stub\n _chart._doRender = function () {\n // do nothing in base, should be overridden by sub-function\n return _chart;\n };\n\n _chart._doRedraw = function () {\n // do nothing in base, should be overridden by sub-function\n return _chart;\n };\n\n _chart.legendables = function () {\n // do nothing in base, should be overridden by sub-function\n return [];\n };\n\n _chart.legendHighlight = function () {\n // do nothing in base, should be overridden by sub-function\n };\n\n _chart.legendReset = function () {\n // do nothing in base, should be overridden by sub-function\n };\n\n _chart.legendToggle = function () {\n // do nothing in base, should be overriden by sub-function\n };\n\n _chart.isLegendableHidden = function () {\n // do nothing in base, should be overridden by sub-function\n return false;\n };\n\n /**\n * Set or get the key accessor function. The key accessor function is used to retrieve the key\n * value from the crossfilter group. Key values are used differently in different charts, for\n * example keys correspond to slices in a pie chart and x axis positions in a grid coordinate chart.\n * @name keyAccessor\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default key accessor\n * chart.keyAccessor(function(d) { return d.key; });\n * // custom key accessor for a multi-value crossfilter reduction\n * chart.keyAccessor(function(p) { return p.value.absGain; });\n * @param {Function} [keyAccessor]\n * @return {Function}\n * @return {dc.baseMixin}\n */\n _chart.keyAccessor = function (keyAccessor) {\n if (!arguments.length) {\n return _keyAccessor;\n }\n _keyAccessor = keyAccessor;\n return _chart;\n };\n\n /**\n * Set or get the value accessor function. The value accessor function is used to retrieve the\n * value from the crossfilter group. Group values are used differently in different charts, for\n * example values correspond to slice sizes in a pie chart and y axis positions in a grid\n * coordinate chart.\n * @name valueAccessor\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default value accessor\n * chart.valueAccessor(function(d) { return d.value; });\n * // custom value accessor for a multi-value crossfilter reduction\n * chart.valueAccessor(function(p) { return p.value.percentageGain; });\n * @param {Function} [valueAccessor]\n * @return {Function}\n * @return {dc.baseMixin}\n */\n _chart.valueAccessor = function (valueAccessor) {\n if (!arguments.length) {\n return _valueAccessor;\n }\n _valueAccessor = valueAccessor;\n return _chart;\n };\n\n /**\n * Set or get the label function. The chart class will use this function to render labels for each\n * child element in the chart, e.g. slices in a pie chart or bubbles in a bubble chart. Not every\n * chart supports the label function for example bar chart and line chart do not use this function\n * at all.\n * @name label\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default label function just return the key\n * chart.label(function(d) { return d.key; });\n * // label function has access to the standard d3 data binding and can get quite complicated\n * chart.label(function(d) { return d.data.key + '(' + Math.floor(d.data.value / all.value() * 100) + '%)'; });\n * @param {Function} [labelFunction]\n * @return {Function}\n * @return {dc.baseMixin}\n */\n _chart.label = function (labelFunction) {\n if (!arguments.length) {\n return _label;\n }\n _label = labelFunction;\n _renderLabel = true;\n return _chart;\n };\n\n /**\n * Turn on/off label rendering\n * @name renderLabel\n * @memberof dc.baseMixin\n * @instance\n * @param {Boolean} [renderLabel=false]\n * @return {Boolean}\n * @return {dc.baseMixin}\n */\n _chart.renderLabel = function (renderLabel) {\n if (!arguments.length) {\n return _renderLabel;\n }\n _renderLabel = renderLabel;\n return _chart;\n };\n\n /**\n * Set or get the title function. The chart class will use this function to render the SVGElement title\n * (usually interpreted by browser as tooltips) for each child element in the chart, e.g. a slice\n * in a pie chart or a bubble in a bubble chart. Almost every chart supports the title function;\n * however in grid coordinate charts you need to turn off the brush in order to see titles, because\n * otherwise the brush layer will block tooltip triggering.\n * @name title\n * @memberof dc.baseMixin\n * @instance\n * @example\n * // default title function just return the key\n * chart.title(function(d) { return d.key + ': ' + d.value; });\n * // title function has access to the standard d3 data binding and can get quite complicated\n * chart.title(function(p) {\n * return p.key.getFullYear()\n * + '\\n'\n * + 'Index Gain: ' + numberFormat(p.value.absGain) + '\\n'\n * + 'Index Gain in Percentage: ' + numberFormat(p.value.percentageGain) + '%\\n'\n * + 'Fluctuation / Index Ratio: ' + numberFormat(p.value.fluctuationPercentage) + '%';\n * });\n * @param {Function} [titleFunction]\n * @return {Function}\n * @return {dc.baseMixin}\n */\n _chart.title = function (titleFunction) {\n if (!arguments.length) {\n return _title;\n }\n _title = titleFunction;\n return _chart;\n };\n\n /**\n * Turn on/off title rendering, or return the state of the render title flag if no arguments are\n * given.\n * @name renderTitle\n * @memberof dc.baseMixin\n * @instance\n * @param {Boolean} [renderTitle=true]\n * @return {Boolean}\n * @return {dc.baseMixin}\n */\n _chart.renderTitle = function (renderTitle) {\n if (!arguments.length) {\n return _renderTitle;\n }\n _renderTitle = renderTitle;\n return _chart;\n };\n\n /**\n * A renderlet is similar to an event listener on rendering event. Multiple renderlets can be added\n * to an individual chart. Each time a chart is rerendered or redrawn the renderlets are invoked\n * right after the chart finishes its transitions, giving you a way to modify the SVGElements.\n * Renderlet functions take the chart instance as the only input parameter and you can\n * use the dc API or use raw d3 to achieve pretty much any effect.\n *\n * Use {@link #dc.baseMixin+on on} with a 'renderlet' prefix.\n * Generates a random key for the renderlet, which makes it hard to remove.\n * @name renderlet\n * @memberof dc.baseMixin\n * @instance\n * @deprecated\n * @example\n * // do this instead of .renderlet(function(chart) { ... })\n * chart.on(\"renderlet\", function(chart){\n * // mix of dc API and d3 manipulation\n * chart.select('g.y').style('display', 'none');\n * // its a closure so you can also access other chart variable available in the closure scope\n * moveChart.filter(chart.filter());\n * });\n * @param {Function} renderletFunction\n * @return {dc.baseMixin}\n */\n _chart.renderlet = dc.logger.deprecate(function (renderletFunction) {\n _chart.on('renderlet.' + dc.utils.uniqueId(), renderletFunction);\n return _chart;\n }, 'chart.renderlet has been deprecated. Please use chart.on(\"renderlet.\", renderletFunction)');\n\n /**\n * Get or set the chart group to which this chart belongs. Chart groups are rendered or redrawn\n * together since it is expected they share the same underlying crossfilter data set.\n * @name chartGroup\n * @memberof dc.baseMixin\n * @instance\n * @param {String} [chartGroup]\n * @return {String}\n * @return {dc.baseMixin}\n */\n _chart.chartGroup = function (chartGroup) {\n if (!arguments.length) {\n return _chartGroup;\n }\n if (!_isChild) {\n dc.deregisterChart(_chart, _chartGroup);\n }\n _chartGroup = chartGroup;\n if (!_isChild) {\n dc.registerChart(_chart, _chartGroup);\n }\n return _chart;\n };\n\n /**\n * Expire the internal chart cache. dc charts cache some data internally on a per chart basis to\n * speed up rendering and avoid unnecessary calculation; however it might be useful to clear the\n * cache if you have changed state which will affect rendering. For example if you invoke the\n * `crossfilter.add` function or reset group or dimension after rendering it is a good idea to\n * clear the cache to make sure charts are rendered properly.\n * @name expireCache\n * @memberof dc.baseMixin\n * @instance\n * @return {dc.baseMixin}\n */\n _chart.expireCache = function () {\n // do nothing in base, should be overridden by sub-function\n return _chart;\n };\n\n /**\n * Attach a dc.legend widget to this chart. The legend widget will automatically draw legend labels\n * based on the color setting and names associated with each group.\n * @name legend\n * @memberof dc.baseMixin\n * @instance\n * @example\n * chart.legend(dc.legend().x(400).y(10).itemHeight(13).gap(5))\n * @param {dc.legend} [legend]\n * @return {dc.legend}\n * @return {dc.baseMixin}\n */\n _chart.legend = function (legend) {\n if (!arguments.length) {\n return _legend;\n }\n _legend = legend;\n _legend.parent(_chart);\n return _chart;\n };\n\n /**\n * Returns the internal numeric ID of the chart.\n * @name chartID\n * @memberof dc.baseMixin\n * @instance\n * @return {String}\n */\n _chart.chartID = function () {\n return _chart.__dcFlag__;\n };\n\n /**\n * Set chart options using a configuration object. Each key in the object will cause the method of\n * the same name to be called with the value to set that attribute for the chart.\n * @name options\n * @memberof dc.baseMixin\n * @instance\n * @example\n * chart.options({dimension: myDimension, group: myGroup});\n * @param {{}} opts\n * @return {dc.baseMixin}\n */\n _chart.options = function (opts) {\n var applyOptions = [\n 'anchor',\n 'group',\n 'xAxisLabel',\n 'yAxisLabel',\n 'stack',\n 'title',\n 'point',\n 'getColor',\n 'overlayGeoJson'\n ];\n\n for (var o in opts) {\n if (typeof(_chart[o]) === 'function') {\n if (opts[o] instanceof Array && applyOptions.indexOf(o) !== -1) {\n _chart[o].apply(_chart, opts[o]);\n } else {\n _chart[o].call(_chart, opts[o]);\n }\n } else {\n dc.logger.debug('Not a valid option setter name: ' + o);\n }\n }\n return _chart;\n };\n\n /**\n * All dc chart instance supports the following listeners.\n * Supports the following events:\n * * `renderlet` - This listener function will be invoked after transitions after redraw and render. Replaces the\n * deprecated {@link #dc.baseMixin+renderlet renderlet} method.\n * * `pretransition` - Like `.on('renderlet', ...)` but the event is fired before transitions start.\n * * `preRender` - This listener function will be invoked before chart rendering.\n * * `postRender` - This listener function will be invoked after chart finish rendering including\n * all renderlets' logic.\n * * `preRedraw` - This listener function will be invoked before chart redrawing.\n * * `postRedraw` - This listener function will be invoked after chart finish redrawing\n * including all renderlets' logic.\n * * `filtered` - This listener function will be invoked after a filter is applied, added or removed.\n * * `zoomed` - This listener function will be invoked after a zoom is triggered.\n * @name on\n * @memberof dc.baseMixin\n * @instance\n * @see {@link https://github.com/mbostock/d3/wiki/Internals#dispatch_on d3.dispatch.on}\n * @example\n * .on('renderlet', function(chart, filter){...})\n * .on('pretransition', function(chart, filter){...})\n * .on('preRender', function(chart){...})\n * .on('postRender', function(chart){...})\n * .on('preRedraw', function(chart){...})\n * .on('postRedraw', function(chart){...})\n * .on('filtered', function(chart, filter){...})\n * .on('zoomed', function(chart, filter){...})\n * @param {String} event\n * @param {Function} listener\n * @return {dc.baseMixin}\n */\n _chart.on = function (event, listener) {\n _listeners.on(event, listener);\n return _chart;\n };\n\n return _chart;\n};\n","/**\n * Margin is a mixin that provides margin utility functions for both the Row Chart and Coordinate Grid\n * Charts.\n * @name marginMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @return {dc.marginMixin}\n */\ndc.marginMixin = function (_chart) {\n var _margin = {top: 10, right: 50, bottom: 30, left: 30};\n\n /**\n * Get or set the margins for a particular coordinate grid chart instance. The margins is stored as\n * an associative Javascript array.\n * @name margins\n * @memberof dc.marginMixin\n * @instance\n * @example\n * var leftMargin = chart.margins().left; // 30 by default\n * chart.margins().left = 50;\n * leftMargin = chart.margins().left; // now 50\n * @param {{top: Number, right: Number, left: Number, bottom: Number}} [margins={top: 10, right: 50, bottom: 30, left: 30}]\n * @return {{top: Number, right: Number, left: Number, bottom: Number}}\n * @return {dc.marginMixin}\n */\n _chart.margins = function (margins) {\n if (!arguments.length) {\n return _margin;\n }\n _margin = margins;\n return _chart;\n };\n\n _chart.effectiveWidth = function () {\n return _chart.width() - _chart.margins().left - _chart.margins().right;\n };\n\n _chart.effectiveHeight = function () {\n return _chart.height() - _chart.margins().top - _chart.margins().bottom;\n };\n\n return _chart;\n};\n","/**\n * The Color Mixin is an abstract chart functional class providing universal coloring support\n * as a mix-in for any concrete chart implementation.\n * @name colorMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @return {dc.colorMixin}\n */\ndc.colorMixin = function (_chart) {\n var _colors = d3.scale.category20c();\n var _defaultAccessor = true;\n\n var _colorAccessor = function (d) { return _chart.keyAccessor()(d); };\n\n /**\n * Retrieve current color scale or set a new color scale. This methods accepts any function that\n * operates like a d3 scale.\n * @name colors\n * @memberof dc.colorMixin\n * @instance\n * @see {@link http://github.com/mbostock/d3/wiki/Scales d3.scale}\n * @example\n * // alternate categorical scale\n * chart.colors(d3.scale.category20b());\n * // ordinal scale\n * chart.colors(d3.scale.ordinal().range(['red','green','blue']));\n * // convenience method, the same as above\n * chart.ordinalColors(['red','green','blue']);\n * // set a linear scale\n * chart.linearColors([\"#4575b4\", \"#ffffbf\", \"#a50026\"]);\n * @param {d3.scale} [colorScale=d3.scale.category20c()]\n * @return {d3.scale}\n * @return {dc.colorMixin}\n */\n _chart.colors = function (colorScale) {\n if (!arguments.length) {\n return _colors;\n }\n if (colorScale instanceof Array) {\n _colors = d3.scale.quantize().range(colorScale); // deprecated legacy support, note: this fails for ordinal domains\n } else {\n _colors = d3.functor(colorScale);\n }\n return _chart;\n };\n\n /**\n * Convenience method to set the color scale to d3.scale.ordinal with range `r`.\n * @name ordinalColors\n * @memberof dc.colorMixin\n * @instance\n * @param {Array} r\n * @return {dc.colorMixin}\n */\n _chart.ordinalColors = function (r) {\n return _chart.colors(d3.scale.ordinal().range(r));\n };\n\n /**\n * Convenience method to set the color scale to an Hcl interpolated linear scale with range `r`.\n * @name linearColors\n * @memberof dc.colorMixin\n * @instance\n * @param {Array} r\n * @return {dc.colorMixin}\n */\n _chart.linearColors = function (r) {\n return _chart.colors(d3.scale.linear()\n .range(r)\n .interpolate(d3.interpolateHcl));\n };\n\n /**\n * Set or the get color accessor function. This function will be used to map a data point in a\n * crossfilter group to a color value on the color scale. The default function uses the key\n * accessor.\n * @name colorAccessor\n * @memberof dc.colorMixin\n * @instance\n * @example\n * // default index based color accessor\n * .colorAccessor(function (d, i){return i;})\n * // color accessor for a multi-value crossfilter reduction\n * .colorAccessor(function (d){return d.value.absGain;})\n * @param {Function} [colorAccessor]\n * @return {Function}\n * @return {dc.colorMixin}\n */\n _chart.colorAccessor = function (colorAccessor) {\n if (!arguments.length) {\n return _colorAccessor;\n }\n _colorAccessor = colorAccessor;\n _defaultAccessor = false;\n return _chart;\n };\n\n // what is this?\n _chart.defaultColorAccessor = function () {\n return _defaultAccessor;\n };\n\n /**\n * Set or get the current domain for the color mapping function. The domain must be supplied as an\n * array.\n *\n * Note: previously this method accepted a callback function. Instead you may use a custom scale\n * set by `.colors`.\n * @name colorDomain\n * @memberof dc.colorMixin\n * @instance\n * @param {Array} [domain]\n * @return {Array}\n * @return {dc.colorMixin}\n */\n _chart.colorDomain = function (domain) {\n if (!arguments.length) {\n return _colors.domain();\n }\n _colors.domain(domain);\n return _chart;\n };\n\n /**\n * Set the domain by determining the min and max values as retrieved by `.colorAccessor` over the\n * chart's dataset.\n * @name calculateColorDomain\n * @memberof dc.colorMixin\n * @instance\n * @return {dc.colorMixin}\n */\n _chart.calculateColorDomain = function () {\n var newDomain = [d3.min(_chart.data(), _chart.colorAccessor()),\n d3.max(_chart.data(), _chart.colorAccessor())];\n _colors.domain(newDomain);\n return _chart;\n };\n\n /**\n * Get the color for the datum d and counter i. This is used internally by charts to retrieve a color.\n * @name getColor\n * @memberof dc.colorMixin\n * @instance\n * @param {*} d\n * @param {Number} [i]\n * @return {String}\n */\n _chart.getColor = function (d, i) {\n return _colors(_colorAccessor.call(this, d, i));\n };\n\n /**\n * Get the color for the datum d and counter i. This is used internally by charts to retrieve a color.\n * @name colorCalculator\n * @memberof dc.colorMixin\n * @instance\n * @param {*} [colorCalculator]\n * @return {*}\n */\n _chart.colorCalculator = function (colorCalculator) {\n if (!arguments.length) {\n return _chart.getColor;\n }\n _chart.getColor = colorCalculator;\n return _chart;\n };\n\n return _chart;\n};\n","/**\n * Coordinate Grid is an abstract base chart designed to support a number of coordinate grid based\n * concrete chart types, e.g. bar chart, line chart, and bubble chart.\n * @name coordinateGridMixin\n * @memberof dc\n * @mixin\n * @mixes dc.colorMixin\n * @mixes dc.marginMixin\n * @mixes dc.baseMixin\n * @param {Object} _chart\n * @return {dc.coordinateGridMixin}\n */\ndc.coordinateGridMixin = function (_chart) {\n var GRID_LINE_CLASS = 'grid-line';\n var HORIZONTAL_CLASS = 'horizontal';\n var VERTICAL_CLASS = 'vertical';\n var Y_AXIS_LABEL_CLASS = 'y-axis-label';\n var X_AXIS_LABEL_CLASS = 'x-axis-label';\n var DEFAULT_AXIS_LABEL_PADDING = 12;\n\n _chart = dc.colorMixin(dc.marginMixin(dc.baseMixin(_chart)));\n\n _chart.colors(d3.scale.category10());\n _chart._mandatoryAttributes().push('x');\n\n function zoomHandler () {\n _refocused = true;\n if (_zoomOutRestrict) {\n _chart.x().domain(constrainRange(_chart.x().domain(), _xOriginalDomain));\n if (_rangeChart) {\n _chart.x().domain(constrainRange(_chart.x().domain(), _rangeChart.x().domain()));\n }\n }\n\n var domain = _chart.x().domain();\n var domFilter = dc.filters.RangedFilter(domain[0], domain[1]);\n\n _chart.replaceFilter(domFilter);\n _chart.rescale();\n _chart.redraw();\n\n if (_rangeChart && !rangesEqual(_chart.filter(), _rangeChart.filter())) {\n dc.events.trigger(function () {\n _rangeChart.replaceFilter(domFilter);\n _rangeChart.redraw();\n });\n }\n\n _chart._invokeZoomedListener();\n\n dc.events.trigger(function () {\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n\n _refocused = !rangesEqual(domain, _xOriginalDomain);\n }\n\n var _parent;\n var _g;\n var _chartBodyG;\n\n var _x;\n var _xOriginalDomain;\n var _xAxis = d3.svg.axis().orient('bottom');\n var _xUnits = dc.units.integers;\n var _xAxisPadding = 0;\n var _xElasticity = false;\n var _xAxisLabel;\n var _xAxisLabelPadding = 0;\n var _lastXDomain;\n\n var _y;\n var _yAxis = d3.svg.axis().orient('left');\n var _yAxisPadding = 0;\n var _yElasticity = false;\n var _yAxisLabel;\n var _yAxisLabelPadding = 0;\n\n var _brush = d3.svg.brush();\n var _brushOn = true;\n var _round;\n\n var _renderHorizontalGridLine = false;\n var _renderVerticalGridLine = false;\n\n var _refocused = false, _resizing = false;\n var _unitCount;\n\n var _zoomScale = [1, Infinity];\n var _zoomOutRestrict = true;\n\n var _zoom = d3.behavior.zoom().on('zoom', zoomHandler);\n var _nullZoom = d3.behavior.zoom().on('zoom', null);\n var _hasBeenMouseZoomable = false;\n\n var _rangeChart;\n var _focusChart;\n\n var _mouseZoomable = false;\n var _clipPadding = 0;\n\n var _outerRangeBandPadding = 0.5;\n var _rangeBandPadding = 0;\n\n var _useRightYAxis = false;\n\n /**\n * When changing the domain of the x or y scale, it is necessary to tell the chart to recalculate\n * and redraw the axes. (`.rescale()` is called automatically when the x or y scale is replaced\n * with `.x()` or `.y()`, and has no effect on elastic scales.)\n * @name rescale\n * @memberof dc.coordinateGridMixin\n * @instance\n * @return {dc.coordinateGridMixin}\n */\n _chart.rescale = function () {\n _unitCount = undefined;\n _resizing = true;\n return _chart;\n };\n\n /**\n * Get or set the range selection chart associated with this instance. Setting the range selection\n * chart using this function will automatically update its selection brush when the current chart\n * zooms in. In return the given range chart will also automatically attach this chart as its focus\n * chart hence zoom in when range brush updates. See the [Nasdaq 100\n * Index](http://dc-js.github.com/dc.js/) example for this effect in action.\n * @name rangeChart\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {dc.coordinateGridMixin} [rangeChart]\n * @return {dc.coordinateGridMixin}\n */\n _chart.rangeChart = function (rangeChart) {\n if (!arguments.length) {\n return _rangeChart;\n }\n _rangeChart = rangeChart;\n _rangeChart.focusChart(_chart);\n return _chart;\n };\n\n /**\n * Get or set the scale extent for mouse zooms.\n * @name zoomScale\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Array} [extent=[1, Infinity]]\n * @return {Array}\n * @return {dc.coordinateGridMixin}\n */\n _chart.zoomScale = function (extent) {\n if (!arguments.length) {\n return _zoomScale;\n }\n _zoomScale = extent;\n return _chart;\n };\n\n /**\n * Get or set the zoom restriction for the chart. If true limits the zoom to origional domain of the chart.\n * @name zoomOutRestrict\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [zoomOutRestrict=true]\n * @return {Boolean}\n * @return {dc.coordinateGridMixin}\n */\n _chart.zoomOutRestrict = function (zoomOutRestrict) {\n if (!arguments.length) {\n return _zoomOutRestrict;\n }\n _zoomScale[0] = zoomOutRestrict ? 1 : 0;\n _zoomOutRestrict = zoomOutRestrict;\n return _chart;\n };\n\n _chart._generateG = function (parent) {\n if (parent === undefined) {\n _parent = _chart.svg();\n } else {\n _parent = parent;\n }\n\n _g = _parent.append('g');\n\n _chartBodyG = _g.append('g').attr('class', 'chart-body')\n .attr('transform', 'translate(' + _chart.margins().left + ', ' + _chart.margins().top + ')')\n .attr('clip-path', 'url(#' + getClipPathId() + ')');\n\n return _g;\n };\n\n /**\n * Get or set the root g element. This method is usually used to retrieve the g element in order to\n * overlay custom svg drawing programatically. **Caution**: The root g element is usually generated\n * by dc.js internals, and resetting it might produce unpredictable result.\n * @name g\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {SVGElement} [gElement]\n * @return {SVGElement}\n * @return {dc.coordinateGridMixin}\n */\n _chart.g = function (gElement) {\n if (!arguments.length) {\n return _g;\n }\n _g = gElement;\n return _chart;\n };\n\n /**\n * Set or get mouse zoom capability flag (default: false). When turned on the chart will be\n * zoomable using the mouse wheel. If the range selector chart is attached zooming will also update\n * the range selection brush on the associated range selector chart.\n * @name mouseZoomable\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [mouseZoomable=false]\n * @return {Boolean}\n * @return {dc.coordinateGridMixin}\n */\n _chart.mouseZoomable = function (mouseZoomable) {\n if (!arguments.length) {\n return _mouseZoomable;\n }\n _mouseZoomable = mouseZoomable;\n return _chart;\n };\n\n /**\n * Retrieve the svg group for the chart body.\n * @name chartBodyG\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {SVGElement} [chartBodyG]\n * @return {SVGElement}\n */\n _chart.chartBodyG = function (chartBodyG) {\n if (!arguments.length) {\n return _chartBodyG;\n }\n _chartBodyG = chartBodyG;\n return _chart;\n };\n\n /**\n * **mandatory**\n *\n * Get or set the x scale. The x scale can be any d3\n * [quantitive scale](https://github.com/mbostock/d3/wiki/Quantitative-Scales) or\n * [ordinal scale](https://github.com/mbostock/d3/wiki/Ordinal-Scales).\n * @name x\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link http://github.com/mbostock/d3/wiki/Scales d3.scale}\n * @example\n * // set x to a linear scale\n * chart.x(d3.scale.linear().domain([-2500, 2500]))\n * // set x to a time scale to generate histogram\n * chart.x(d3.time.scale().domain([new Date(1985, 0, 1), new Date(2012, 11, 31)]))\n * @param {d3.scale} [xScale]\n * @return {d3.scale}\n * @return {dc.coordinateGridMixin}\n */\n _chart.x = function (xScale) {\n if (!arguments.length) {\n return _x;\n }\n _x = xScale;\n _xOriginalDomain = _x.domain();\n _chart.rescale();\n return _chart;\n };\n\n _chart.xOriginalDomain = function () {\n return _xOriginalDomain;\n };\n\n /**\n * Set or get the xUnits function. The coordinate grid chart uses the xUnits function to calculate\n * the number of data projections on x axis such as the number of bars for a bar chart or the\n * number of dots for a line chart. This function is expected to return a Javascript array of all\n * data points on x axis, or the number of points on the axis. [d3 time range functions\n * d3.time.days, d3.time.months, and\n * d3.time.years](https://github.com/mbostock/d3/wiki/Time-Intervals#aliases) are all valid xUnits\n * function. dc.js also provides a few units function, see the [Utilities](#utilities) section for\n * a list of built-in units functions. The default xUnits function is dc.units.integers.\n * @name xUnits\n * @memberof dc.coordinateGridMixin\n * @instance\n * @example\n * // set x units to count days\n * chart.xUnits(d3.time.days);\n * // set x units to count months\n * chart.xUnits(d3.time.months);\n *\n * // A custom xUnits function can be used as long as it follows the following interface:\n * // units in integer\n * function(start, end, xDomain) {\n * // simply calculates how many integers in the domain\n * return Math.abs(end - start);\n * };\n *\n * // fixed units\n * function(start, end, xDomain) {\n * // be aware using fixed units will disable the focus/zoom ability on the chart\n * return 1000;\n * @param {Function} [xUnits]\n * @return {Function}\n * @return {dc.coordinateGridMixin}\n */\n _chart.xUnits = function (xUnits) {\n if (!arguments.length) {\n return _xUnits;\n }\n _xUnits = xUnits;\n return _chart;\n };\n\n /**\n * Set or get the x axis used by a particular coordinate grid chart instance. This function is most\n * useful when x axis customization is required. The x axis in dc.js is an instance of a [d3\n * axis object](https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-axis); therefore it supports any\n * valid d3 axis manipulation. **Caution**: The x axis is usually generated internally by dc;\n * resetting it may cause unexpected results.\n * @name xAxis\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link http://github.com/mbostock/d3/wiki/SVG-Axes d3.svg.axis}\n * @example\n * // customize x axis tick format\n * chart.xAxis().tickFormat(function(v) {return v + '%';});\n * // customize x axis tick values\n * chart.xAxis().tickValues([0, 100, 200, 300]);\n * @param {d3.svg.axis} [xAxis=d3.svg.axis().orient('bottom')]\n * @return {d3.svg.axis}\n * @return {dc.coordinateGridMixin}\n */\n _chart.xAxis = function (xAxis) {\n if (!arguments.length) {\n return _xAxis;\n }\n _xAxis = xAxis;\n return _chart;\n };\n\n /**\n * Turn on/off elastic x axis behavior. If x axis elasticity is turned on, then the grid chart will\n * attempt to recalculate the x axis range whenever a redraw event is triggered.\n * @name elasticX\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [elasticX=false]\n * @return {Boolean}\n * @return {dc.coordinateGridMixin}\n */\n _chart.elasticX = function (elasticX) {\n if (!arguments.length) {\n return _xElasticity;\n }\n _xElasticity = elasticX;\n return _chart;\n };\n\n /**\n * Set or get x axis padding for the elastic x axis. The padding will be added to both end of the x\n * axis if elasticX is turned on; otherwise it is ignored.\n *\n * padding can be an integer or percentage in string (e.g. '10%'). Padding can be applied to\n * number or date x axes. When padding a date axis, an integer represents number of days being padded\n * and a percentage string will be treated the same as an integer.\n * @name xAxisPadding\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Number|String} [padding=0]\n * @return {Number|String}\n * @return {dc.coordinateGridMixin}\n */\n _chart.xAxisPadding = function (padding) {\n if (!arguments.length) {\n return _xAxisPadding;\n }\n _xAxisPadding = padding;\n return _chart;\n };\n\n /**\n * Returns the number of units displayed on the x axis using the unit measure configured by\n * .xUnits.\n * @name xUnitCount\n * @memberof dc.coordinateGridMixin\n * @instance\n * @return {Number}\n */\n _chart.xUnitCount = function () {\n if (_unitCount === undefined) {\n var units = _chart.xUnits()(_chart.x().domain()[0], _chart.x().domain()[1], _chart.x().domain());\n\n if (units instanceof Array) {\n _unitCount = units.length;\n } else {\n _unitCount = units;\n }\n }\n\n return _unitCount;\n };\n\n /**\n * Gets or sets whether the chart should be drawn with a right axis instead of a left axis. When\n * used with a chart in a composite chart, allows both left and right Y axes to be shown on a\n * chart.\n * @name useRightYAxis\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [useRightYAxis=false]\n * @return {Boolean}\n * @return {dc.coordinateGridMixin}\n */\n _chart.useRightYAxis = function (useRightYAxis) {\n if (!arguments.length) {\n return _useRightYAxis;\n }\n _useRightYAxis = useRightYAxis;\n return _chart;\n };\n\n /**\n * Returns true if the chart is using ordinal xUnits ([dc.units.ordinal](#dcunitsordinal)), or false\n * otherwise. Most charts behave differently with ordinal data and use the result of this method to\n * trigger the appropriate logic.\n * @name isOrdinal\n * @memberof dc.coordinateGridMixin\n * @instance\n * @return {Boolean}\n */\n _chart.isOrdinal = function () {\n return _chart.xUnits() === dc.units.ordinal;\n };\n\n _chart._useOuterPadding = function () {\n return true;\n };\n\n _chart._ordinalXDomain = function () {\n var groups = _chart._computeOrderedGroups(_chart.data());\n return groups.map(_chart.keyAccessor());\n };\n\n function compareDomains (d1, d2) {\n return !d1 || !d2 || d1.length !== d2.length ||\n d1.some(function (elem, i) { return elem.toString() !== d2[i].toString(); });\n }\n\n function prepareXAxis (g, render) {\n if (!_chart.isOrdinal()) {\n if (_chart.elasticX()) {\n _x.domain([_chart.xAxisMin(), _chart.xAxisMax()]);\n }\n } else { // _chart.isOrdinal()\n if (_chart.elasticX() || _x.domain().length === 0) {\n _x.domain(_chart._ordinalXDomain());\n }\n }\n\n // has the domain changed?\n var xdom = _x.domain();\n if (render || compareDomains(_lastXDomain, xdom)) {\n _chart.rescale();\n }\n _lastXDomain = xdom;\n\n // please can't we always use rangeBands for bar charts?\n if (_chart.isOrdinal()) {\n _x.rangeBands([0, _chart.xAxisLength()], _rangeBandPadding,\n _chart._useOuterPadding() ? _outerRangeBandPadding : 0);\n } else {\n _x.range([0, _chart.xAxisLength()]);\n }\n\n _xAxis = _xAxis.scale(_chart.x());\n\n renderVerticalGridLines(g);\n }\n\n _chart.renderXAxis = function (g) {\n var axisXG = g.selectAll('g.x');\n\n if (axisXG.empty()) {\n axisXG = g.append('g')\n .attr('class', 'axis x')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart._xAxisY() + ')');\n }\n\n var axisXLab = g.selectAll('text.' + X_AXIS_LABEL_CLASS);\n if (axisXLab.empty() && _chart.xAxisLabel()) {\n axisXLab = g.append('text')\n .attr('class', X_AXIS_LABEL_CLASS)\n .attr('transform', 'translate(' + (_chart.margins().left + _chart.xAxisLength() / 2) + ',' +\n (_chart.height() - _xAxisLabelPadding) + ')')\n .attr('text-anchor', 'middle');\n }\n if (_chart.xAxisLabel() && axisXLab.text() !== _chart.xAxisLabel()) {\n axisXLab.text(_chart.xAxisLabel());\n }\n\n dc.transition(axisXG, _chart.transitionDuration())\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart._xAxisY() + ')')\n .call(_xAxis);\n dc.transition(axisXLab, _chart.transitionDuration())\n .attr('transform', 'translate(' + (_chart.margins().left + _chart.xAxisLength() / 2) + ',' +\n (_chart.height() - _xAxisLabelPadding) + ')');\n };\n\n function renderVerticalGridLines (g) {\n var gridLineG = g.selectAll('g.' + VERTICAL_CLASS);\n\n if (_renderVerticalGridLine) {\n if (gridLineG.empty()) {\n gridLineG = g.insert('g', ':first-child')\n .attr('class', GRID_LINE_CLASS + ' ' + VERTICAL_CLASS)\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n }\n\n var ticks = _xAxis.tickValues() ? _xAxis.tickValues() :\n (typeof _x.ticks === 'function' ? _x.ticks(_xAxis.ticks()[0]) : _x.domain());\n\n var lines = gridLineG.selectAll('line')\n .data(ticks);\n\n // enter\n var linesGEnter = lines.enter()\n .append('line')\n .attr('x1', function (d) {\n return _x(d);\n })\n .attr('y1', _chart._xAxisY() - _chart.margins().top)\n .attr('x2', function (d) {\n return _x(d);\n })\n .attr('y2', 0)\n .attr('opacity', 0);\n dc.transition(linesGEnter, _chart.transitionDuration())\n .attr('opacity', 1);\n\n // update\n dc.transition(lines, _chart.transitionDuration())\n .attr('x1', function (d) {\n return _x(d);\n })\n .attr('y1', _chart._xAxisY() - _chart.margins().top)\n .attr('x2', function (d) {\n return _x(d);\n })\n .attr('y2', 0);\n\n // exit\n lines.exit().remove();\n } else {\n gridLineG.selectAll('line').remove();\n }\n }\n\n _chart._xAxisY = function () {\n return (_chart.height() - _chart.margins().bottom);\n };\n\n _chart.xAxisLength = function () {\n return _chart.effectiveWidth();\n };\n\n /**\n * Set or get the x axis label. If setting the label, you may optionally include additional padding to\n * the margin to make room for the label. By default the padded is set to 12 to accomodate the text height.\n * @name xAxisLabel\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {String} [labelText]\n * @param {Number} [padding=12]\n * @return {String}\n */\n _chart.xAxisLabel = function (labelText, padding) {\n if (!arguments.length) {\n return _xAxisLabel;\n }\n _xAxisLabel = labelText;\n _chart.margins().bottom -= _xAxisLabelPadding;\n _xAxisLabelPadding = (padding === undefined) ? DEFAULT_AXIS_LABEL_PADDING : padding;\n _chart.margins().bottom += _xAxisLabelPadding;\n return _chart;\n };\n\n _chart._prepareYAxis = function (g) {\n if (_y === undefined || _chart.elasticY()) {\n if (_y === undefined) {\n _y = d3.scale.linear();\n }\n var min = _chart.yAxisMin() || 0,\n max = _chart.yAxisMax() || 0;\n _y.domain([min, max]).rangeRound([_chart.yAxisHeight(), 0]);\n }\n\n _y.range([_chart.yAxisHeight(), 0]);\n _yAxis = _yAxis.scale(_y);\n\n if (_useRightYAxis) {\n _yAxis.orient('right');\n }\n\n _chart._renderHorizontalGridLinesForAxis(g, _y, _yAxis);\n };\n\n _chart.renderYAxisLabel = function (axisClass, text, rotation, labelXPosition) {\n labelXPosition = labelXPosition || _yAxisLabelPadding;\n\n var axisYLab = _chart.g().selectAll('text.' + Y_AXIS_LABEL_CLASS + '.' + axisClass + '-label');\n var labelYPosition = (_chart.margins().top + _chart.yAxisHeight() / 2);\n if (axisYLab.empty() && text) {\n axisYLab = _chart.g().append('text')\n .attr('transform', 'translate(' + labelXPosition + ',' + labelYPosition + '),rotate(' + rotation + ')')\n .attr('class', Y_AXIS_LABEL_CLASS + ' ' + axisClass + '-label')\n .attr('text-anchor', 'middle')\n .text(text);\n }\n if (text && axisYLab.text() !== text) {\n axisYLab.text(text);\n }\n dc.transition(axisYLab, _chart.transitionDuration())\n .attr('transform', 'translate(' + labelXPosition + ',' + labelYPosition + '),rotate(' + rotation + ')');\n };\n\n _chart.renderYAxisAt = function (axisClass, axis, position) {\n var axisYG = _chart.g().selectAll('g.' + axisClass);\n if (axisYG.empty()) {\n axisYG = _chart.g().append('g')\n .attr('class', 'axis ' + axisClass)\n .attr('transform', 'translate(' + position + ',' + _chart.margins().top + ')');\n }\n\n dc.transition(axisYG, _chart.transitionDuration())\n .attr('transform', 'translate(' + position + ',' + _chart.margins().top + ')')\n .call(axis);\n };\n\n _chart.renderYAxis = function () {\n var axisPosition = _useRightYAxis ? (_chart.width() - _chart.margins().right) : _chart._yAxisX();\n _chart.renderYAxisAt('y', _yAxis, axisPosition);\n var labelPosition = _useRightYAxis ? (_chart.width() - _yAxisLabelPadding) : _yAxisLabelPadding;\n var rotation = _useRightYAxis ? 90 : -90;\n _chart.renderYAxisLabel('y', _chart.yAxisLabel(), rotation, labelPosition);\n };\n\n _chart._renderHorizontalGridLinesForAxis = function (g, scale, axis) {\n var gridLineG = g.selectAll('g.' + HORIZONTAL_CLASS);\n\n if (_renderHorizontalGridLine) {\n var ticks = axis.tickValues() ? axis.tickValues() : scale.ticks(axis.ticks()[0]);\n\n if (gridLineG.empty()) {\n gridLineG = g.insert('g', ':first-child')\n .attr('class', GRID_LINE_CLASS + ' ' + HORIZONTAL_CLASS)\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n }\n\n var lines = gridLineG.selectAll('line')\n .data(ticks);\n\n // enter\n var linesGEnter = lines.enter()\n .append('line')\n .attr('x1', 1)\n .attr('y1', function (d) {\n return scale(d);\n })\n .attr('x2', _chart.xAxisLength())\n .attr('y2', function (d) {\n return scale(d);\n })\n .attr('opacity', 0);\n dc.transition(linesGEnter, _chart.transitionDuration())\n .attr('opacity', 1);\n\n // update\n dc.transition(lines, _chart.transitionDuration())\n .attr('x1', 1)\n .attr('y1', function (d) {\n return scale(d);\n })\n .attr('x2', _chart.xAxisLength())\n .attr('y2', function (d) {\n return scale(d);\n });\n\n // exit\n lines.exit().remove();\n } else {\n gridLineG.selectAll('line').remove();\n }\n };\n\n _chart._yAxisX = function () {\n return _chart.useRightYAxis() ? _chart.width() - _chart.margins().right : _chart.margins().left;\n };\n\n /**\n * Set or get the y axis label. If setting the label, you may optionally include additional padding\n * to the margin to make room for the label. By default the padded is set to 12 to accomodate the\n * text height.\n * @name yAxisLabel\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {String} [labelText]\n * @param {Number} [padding=12]\n * @return {String}\n * @return {dc.coordinateGridMixin}\n */\n _chart.yAxisLabel = function (labelText, padding) {\n if (!arguments.length) {\n return _yAxisLabel;\n }\n _yAxisLabel = labelText;\n _chart.margins().left -= _yAxisLabelPadding;\n _yAxisLabelPadding = (padding === undefined) ? DEFAULT_AXIS_LABEL_PADDING : padding;\n _chart.margins().left += _yAxisLabelPadding;\n return _chart;\n };\n\n /**\n * Get or set the y scale. The y scale is typically automatically determined by the chart implementation.\n * @name y\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link http://github.com/mbostock/d3/wiki/Scales d3.scale}\n * @param {d3.scale} [yScale]\n * @return {d3.scale}\n * @return {dc.coordinateGridMixin}\n */\n _chart.y = function (yScale) {\n if (!arguments.length) {\n return _y;\n }\n _y = yScale;\n _chart.rescale();\n return _chart;\n };\n\n /**\n * Set or get the y axis used by the coordinate grid chart instance. This function is most useful\n * when y axis customization is required. The y axis in dc.js is simply an instance of a [d3 axis\n * object](https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-_axis); therefore it supports any\n * valid d3 axis manipulation. **Caution**: The y axis is usually generated internally by dc;\n * resetting it may cause unexpected results.\n * @name yAxis\n * @memberof dc.coordinateGridMixin\n * @instance\n * @see {@link http://github.com/mbostock/d3/wiki/SVG-Axes d3.svg.axis}\n * @example\n * // customize y axis tick format\n * chart.yAxis().tickFormat(function(v) {return v + '%';});\n * // customize y axis tick values\n * chart.yAxis().tickValues([0, 100, 200, 300]);\n * @param {d3.svg.axis} [yAxis=d3.svg.axis().orient('left')]\n * @return {d3.svg.axis}\n * @return {dc.coordinateGridMixin}\n */\n _chart.yAxis = function (yAxis) {\n if (!arguments.length) {\n return _yAxis;\n }\n _yAxis = yAxis;\n return _chart;\n };\n\n /**\n * Turn on/off elastic y axis behavior. If y axis elasticity is turned on, then the grid chart will\n * attempt to recalculate the y axis range whenever a redraw event is triggered.\n * @name elasticY\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [elasticY=false]\n * @return {Boolean}\n * @return {dc.coordinateGridMixin}\n */\n _chart.elasticY = function (elasticY) {\n if (!arguments.length) {\n return _yElasticity;\n }\n _yElasticity = elasticY;\n return _chart;\n };\n\n /**\n * Turn on/off horizontal grid lines.\n * @name renderHorizontalGridLines\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [renderHorizontalGridLines=false]\n * @return {Boolean}\n * @return {dc.coordinateGridMixin}\n */\n _chart.renderHorizontalGridLines = function (renderHorizontalGridLines) {\n if (!arguments.length) {\n return _renderHorizontalGridLine;\n }\n _renderHorizontalGridLine = renderHorizontalGridLines;\n return _chart;\n };\n\n /**\n * Turn on/off vertical grid lines.\n * @name renderVerticalGridLines\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [renderVerticalGridLines=false]\n * @return {Boolean}\n * @return {dc.coordinateGridMixin}\n */\n _chart.renderVerticalGridLines = function (renderVerticalGridLines) {\n if (!arguments.length) {\n return _renderVerticalGridLine;\n }\n _renderVerticalGridLine = renderVerticalGridLines;\n return _chart;\n };\n\n /**\n * Calculates the minimum x value to display in the chart. Includes xAxisPadding if set.\n * @name xAxisMin\n * @memberof dc.coordinateGridMixin\n * @instance\n * @return {*}\n */\n _chart.xAxisMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return _chart.keyAccessor()(e);\n });\n return dc.utils.subtract(min, _xAxisPadding);\n };\n\n /**\n * Calculates the maximum x value to display in the chart. Includes xAxisPadding if set.\n * @name xAxisMax\n * @memberof dc.coordinateGridMixin\n * @instance\n * @return {*}\n */\n _chart.xAxisMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return _chart.keyAccessor()(e);\n });\n return dc.utils.add(max, _xAxisPadding);\n };\n\n /**\n * Calculates the minimum y value to display in the chart. Includes yAxisPadding if set.\n * @name yAxisMin\n * @memberof dc.coordinateGridMixin\n * @instance\n * @return {*}\n */\n _chart.yAxisMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return _chart.valueAccessor()(e);\n });\n return dc.utils.subtract(min, _yAxisPadding);\n };\n\n /**\n * Calculates the maximum y value to display in the chart. Includes yAxisPadding if set.\n * @name yAxisMax\n * @memberof dc.coordinateGridMixin\n * @instance\n * @return {*}\n */\n _chart.yAxisMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return _chart.valueAccessor()(e);\n });\n return dc.utils.add(max, _yAxisPadding);\n };\n\n /**\n * Set or get y axis padding for the elastic y axis. The padding will be added to the top of the y\n * axis if elasticY is turned on; otherwise it is ignored.\n *\n * padding can be an integer or percentage in string (e.g. '10%'). Padding can be applied to\n * number or date axes. When padding a date axis, an integer represents number of days being padded\n * and a percentage string will be treated the same as an integer.\n * @name yAxisPadding\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Number|String} [padding=0]\n * @return {Number}\n * @return {dc.coordinateGridMixin}\n */\n _chart.yAxisPadding = function (padding) {\n if (!arguments.length) {\n return _yAxisPadding;\n }\n _yAxisPadding = padding;\n return _chart;\n };\n\n _chart.yAxisHeight = function () {\n return _chart.effectiveHeight();\n };\n\n /**\n * Set or get the rounding function used to quantize the selection when brushing is enabled.\n * @name round\n * @memberof dc.coordinateGridMixin\n * @instance\n * @example\n * // set x unit round to by month, this will make sure range selection brush will\n * // select whole months\n * chart.round(d3.time.month.round);\n * @param {Function} [round]\n * @return {Function}\n * @return {dc.coordinateGridMixin}\n */\n _chart.round = function (round) {\n if (!arguments.length) {\n return _round;\n }\n _round = round;\n return _chart;\n };\n\n _chart._rangeBandPadding = function (_) {\n if (!arguments.length) {\n return _rangeBandPadding;\n }\n _rangeBandPadding = _;\n return _chart;\n };\n\n _chart._outerRangeBandPadding = function (_) {\n if (!arguments.length) {\n return _outerRangeBandPadding;\n }\n _outerRangeBandPadding = _;\n return _chart;\n };\n\n dc.override(_chart, 'filter', function (_) {\n if (!arguments.length) {\n return _chart._filter();\n }\n\n _chart._filter(_);\n\n if (_) {\n _chart.brush().extent(_);\n } else {\n _chart.brush().clear();\n }\n\n return _chart;\n });\n\n _chart.brush = function (_) {\n if (!arguments.length) {\n return _brush;\n }\n _brush = _;\n return _chart;\n };\n\n function brushHeight () {\n return _chart._xAxisY() - _chart.margins().top;\n }\n\n _chart.renderBrush = function (g) {\n if (_brushOn) {\n _brush.on('brush', _chart._brushing);\n _brush.on('brushstart', _chart._disableMouseZoom);\n _brush.on('brushend', configureMouseZoom);\n\n var gBrush = g.append('g')\n .attr('class', 'brush')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')')\n .call(_brush.x(_chart.x()));\n _chart.setBrushY(gBrush, false);\n _chart.setHandlePaths(gBrush);\n\n if (_chart.hasFilter()) {\n _chart.redrawBrush(g, false);\n }\n }\n };\n\n _chart.setHandlePaths = function (gBrush) {\n gBrush.selectAll('.resize').append('path').attr('d', _chart.resizeHandlePath);\n };\n\n _chart.setBrushY = function (gBrush) {\n gBrush.selectAll('.brush rect')\n .attr('height', brushHeight());\n gBrush.selectAll('.resize path')\n .attr('d', _chart.resizeHandlePath);\n };\n\n _chart.extendBrush = function () {\n var extent = _brush.extent();\n if (_chart.round()) {\n extent[0] = extent.map(_chart.round())[0];\n extent[1] = extent.map(_chart.round())[1];\n\n _g.select('.brush')\n .call(_brush.extent(extent));\n }\n return extent;\n };\n\n _chart.brushIsEmpty = function (extent) {\n return _brush.empty() || !extent || extent[1] <= extent[0];\n };\n\n _chart._brushing = function () {\n var extent = _chart.extendBrush();\n\n _chart.redrawBrush(_g, false);\n\n if (_chart.brushIsEmpty(extent)) {\n dc.events.trigger(function () {\n _chart.filter(null);\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n } else {\n var rangedFilter = dc.filters.RangedFilter(extent[0], extent[1]);\n\n dc.events.trigger(function () {\n _chart.replaceFilter(rangedFilter);\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n }\n };\n\n _chart.redrawBrush = function (g, doTransition) {\n if (_brushOn) {\n if (_chart.filter() && _chart.brush().empty()) {\n _chart.brush().extent(_chart.filter());\n }\n\n var gBrush = dc.optionalTransition(doTransition, _chart.transitionDuration())(g.select('g.brush'));\n _chart.setBrushY(gBrush);\n gBrush.call(_chart.brush()\n .x(_chart.x())\n .extent(_chart.brush().extent()));\n }\n\n _chart.fadeDeselectedArea();\n };\n\n _chart.fadeDeselectedArea = function () {\n // do nothing, sub-chart should override this function\n };\n\n // borrowed from Crossfilter example\n _chart.resizeHandlePath = function (d) {\n var e = +(d === 'e'), x = e ? 1 : -1, y = brushHeight() / 3;\n return 'M' + (0.5 * x) + ',' + y +\n 'A6,6 0 0 ' + e + ' ' + (6.5 * x) + ',' + (y + 6) +\n 'V' + (2 * y - 6) +\n 'A6,6 0 0 ' + e + ' ' + (0.5 * x) + ',' + (2 * y) +\n 'Z' +\n 'M' + (2.5 * x) + ',' + (y + 8) +\n 'V' + (2 * y - 8) +\n 'M' + (4.5 * x) + ',' + (y + 8) +\n 'V' + (2 * y - 8);\n };\n\n function getClipPathId () {\n return _chart.anchorName().replace(/[ .#=\\[\\]]/g, '-') + '-clip';\n }\n\n /**\n * Get or set the padding in pixels for the clip path. Once set padding will be applied evenly to\n * the top, left, right, and bottom when the clip path is generated. If set to zero, the clip area\n * will be exactly the chart body area minus the margins.\n * @name clipPadding\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Number} [padding=5]\n * @return {Number}\n * @return {dc.coordinateGridMixin}\n */\n _chart.clipPadding = function (padding) {\n if (!arguments.length) {\n return _clipPadding;\n }\n _clipPadding = padding;\n return _chart;\n };\n\n function generateClipPath () {\n var defs = dc.utils.appendOrSelect(_parent, 'defs');\n // cannot select elements; bug in WebKit, must select by id\n // https://groups.google.com/forum/#!topic/d3-js/6EpAzQ2gU9I\n var id = getClipPathId();\n var chartBodyClip = dc.utils.appendOrSelect(defs, '#' + id, 'clipPath').attr('id', id);\n\n var padding = _clipPadding * 2;\n\n dc.utils.appendOrSelect(chartBodyClip, 'rect')\n .attr('width', _chart.xAxisLength() + padding)\n .attr('height', _chart.yAxisHeight() + padding)\n .attr('transform', 'translate(-' + _clipPadding + ', -' + _clipPadding + ')');\n }\n\n _chart._preprocessData = function () {};\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _chart._preprocessData();\n\n _chart._generateG();\n generateClipPath();\n\n drawChart(true);\n\n configureMouseZoom();\n\n return _chart;\n };\n\n _chart._doRedraw = function () {\n _chart._preprocessData();\n\n drawChart(false);\n generateClipPath();\n\n return _chart;\n };\n\n function drawChart (render) {\n if (_chart.isOrdinal()) {\n _brushOn = false;\n }\n\n prepareXAxis(_chart.g(), render);\n _chart._prepareYAxis(_chart.g());\n\n _chart.plotData();\n\n if (_chart.elasticX() || _resizing || render) {\n _chart.renderXAxis(_chart.g());\n }\n\n if (_chart.elasticY() || _resizing || render) {\n _chart.renderYAxis(_chart.g());\n }\n\n if (render) {\n _chart.renderBrush(_chart.g(), false);\n } else {\n _chart.redrawBrush(_chart.g(), _resizing);\n }\n _chart.fadeDeselectedArea();\n _resizing = false;\n }\n\n function configureMouseZoom () {\n if (_mouseZoomable) {\n _chart._enableMouseZoom();\n } else if (_hasBeenMouseZoomable) {\n _chart._disableMouseZoom();\n }\n }\n\n _chart._enableMouseZoom = function () {\n _hasBeenMouseZoomable = true;\n _zoom.x(_chart.x())\n .scaleExtent(_zoomScale)\n .size([_chart.width(), _chart.height()])\n .duration(_chart.transitionDuration());\n _chart.root().call(_zoom);\n };\n\n _chart._disableMouseZoom = function () {\n _chart.root().call(_nullZoom);\n };\n\n function constrainRange (range, constraint) {\n var constrainedRange = [];\n constrainedRange[0] = d3.max([range[0], constraint[0]]);\n constrainedRange[1] = d3.min([range[1], constraint[1]]);\n return constrainedRange;\n }\n\n /**\n * Zoom this chart to focus on the given range. The given range should be an array containing only\n * 2 elements (`[start, end]`) defining a range in the x domain. If the range is not given or set\n * to null, then the zoom will be reset. _For focus to work elasticX has to be turned off;\n * otherwise focus will be ignored.\n * @name focus\n * @memberof dc.coordinateGridMixin\n * @instance\n * @example\n * chart.on('renderlet', function(chart) {\n * // smooth the rendering through event throttling\n * dc.events.trigger(function(){\n * // focus some other chart to the range selected by user on this chart\n * someOtherChart.focus(chart.filter());\n * });\n * })\n * @param {Array} [range]\n */\n _chart.focus = function (range) {\n if (hasRangeSelected(range)) {\n _chart.x().domain(range);\n } else {\n _chart.x().domain(_xOriginalDomain);\n }\n\n _zoom.x(_chart.x());\n zoomHandler();\n };\n\n _chart.refocused = function () {\n return _refocused;\n };\n\n _chart.focusChart = function (c) {\n if (!arguments.length) {\n return _focusChart;\n }\n _focusChart = c;\n _chart.on('filtered', function (chart) {\n if (!chart.filter()) {\n dc.events.trigger(function () {\n _focusChart.x().domain(_focusChart.xOriginalDomain());\n });\n } else if (!rangesEqual(chart.filter(), _focusChart.filter())) {\n dc.events.trigger(function () {\n _focusChart.focus(chart.filter());\n });\n }\n });\n return _chart;\n };\n\n function rangesEqual (range1, range2) {\n if (!range1 && !range2) {\n return true;\n } else if (!range1 || !range2) {\n return false;\n } else if (range1.length === 0 && range2.length === 0) {\n return true;\n } else if (range1[0].valueOf() === range2[0].valueOf() &&\n range1[1].valueOf() === range2[1].valueOf()) {\n return true;\n }\n return false;\n }\n\n /**\n * Turn on/off the brush-based range filter. When brushing is on then user can drag the mouse\n * across a chart with a quantitative scale to perform range filtering based on the extent of the\n * brush, or click on the bars of an ordinal bar chart or slices of a pie chart to filter and\n * un-filter them. However turning on the brush filter will disable other interactive elements on\n * the chart such as highlighting, tool tips, and reference lines. Zooming will still be possible\n * if enabled, but only via scrolling (panning will be disabled.)\n * @name brushOn\n * @memberof dc.coordinateGridMixin\n * @instance\n * @param {Boolean} [brushOn=true]\n * @return {Boolean}\n * @return {dc.coordinateGridMixin}\n */\n _chart.brushOn = function (brushOn) {\n if (!arguments.length) {\n return _brushOn;\n }\n _brushOn = brushOn;\n return _chart;\n };\n\n function hasRangeSelected (range) {\n return range instanceof Array && range.length > 1;\n }\n\n return _chart;\n};\n","/**\n * Stack Mixin is an mixin that provides cross-chart support of stackability using d3.layout.stack.\n * @name stackMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @return {dc.stackMixin}\n */\ndc.stackMixin = function (_chart) {\n\n function prepareValues (layer, layerIdx) {\n var valAccessor = layer.accessor || _chart.valueAccessor();\n layer.name = String(layer.name || layerIdx);\n layer.values = layer.group.all().map(function (d, i) {\n return {\n x: _chart.keyAccessor()(d, i),\n y: layer.hidden ? null : valAccessor(d, i),\n data: d,\n layer: layer.name,\n hidden: layer.hidden\n };\n });\n\n layer.values = layer.values.filter(domainFilter());\n return layer.values;\n }\n\n var _stackLayout = d3.layout.stack()\n .values(prepareValues);\n\n var _stack = [];\n var _titles = {};\n\n var _hidableStacks = false;\n\n function domainFilter () {\n if (!_chart.x()) {\n return d3.functor(true);\n }\n var xDomain = _chart.x().domain();\n if (_chart.isOrdinal()) {\n // TODO #416\n //var domainSet = d3.set(xDomain);\n return function () {\n return true; //domainSet.has(p.x);\n };\n }\n if (_chart.elasticX()) {\n return function () { return true; };\n }\n return function (p) {\n //return true;\n return p.x >= xDomain[0] && p.x <= xDomain[xDomain.length - 1];\n };\n }\n\n /**\n * Stack a new crossfilter group onto this chart with an optional custom value accessor. All stacks\n * in the same chart will share the same key accessor and therefore the same set of keys.\n *\n * For example, in a stacked bar chart, the bars of each stack will be positioned using the same set\n * of keys on the x axis, while stacked vertically. If name is specified then it will be used to\n * generate the legend label.\n * @name stack\n * @memberof dc.stackMixin\n * @instance\n * @see {@link https://github.com/square/crossfilter/wiki/API-Reference#group-map-reduce crossfilter.group}\n * @example\n * // stack group using default accessor\n * chart.stack(valueSumGroup)\n * // stack group using custom accessor\n * .stack(avgByDayGroup, function(d){return d.value.avgByDay;});\n * @param {crossfilter.group} group\n * @param {String} [name]\n * @param {Function} [accessor]\n * @return {Array<{group: crossfilter.group, name: String, accessor: Function}>}\n * @return {dc.stackMixin}\n */\n _chart.stack = function (group, name, accessor) {\n if (!arguments.length) {\n return _stack;\n }\n\n if (arguments.length <= 2) {\n accessor = name;\n }\n\n var layer = {group: group};\n if (typeof name === 'string') {\n layer.name = name;\n }\n if (typeof accessor === 'function') {\n layer.accessor = accessor;\n }\n _stack.push(layer);\n\n return _chart;\n };\n\n dc.override(_chart, 'group', function (g, n, f) {\n if (!arguments.length) {\n return _chart._group();\n }\n _stack = [];\n _titles = {};\n _chart.stack(g, n);\n if (f) {\n _chart.valueAccessor(f);\n }\n return _chart._group(g, n);\n });\n\n /**\n * Allow named stacks to be hidden or shown by clicking on legend items.\n * This does not affect the behavior of hideStack or showStack.\n * @name hidableStacks\n * @memberof dc.stackMixin\n * @instance\n * @param {Boolean} [hidableStacks=false]\n * @return {Boolean}\n * @return {dc.stackMixin}\n */\n _chart.hidableStacks = function (hidableStacks) {\n if (!arguments.length) {\n return _hidableStacks;\n }\n _hidableStacks = hidableStacks;\n return _chart;\n };\n\n function findLayerByName (n) {\n var i = _stack.map(dc.pluck('name')).indexOf(n);\n return _stack[i];\n }\n\n /**\n * Hide all stacks on the chart with the given name.\n * The chart must be re-rendered for this change to appear.\n * @name hideStack\n * @memberof dc.stackMixin\n * @instance\n * @param {String} stackName\n * @return {dc.stackMixin}\n */\n _chart.hideStack = function (stackName) {\n var layer = findLayerByName(stackName);\n if (layer) {\n layer.hidden = true;\n }\n return _chart;\n };\n\n /**\n * Show all stacks on the chart with the given name.\n * The chart must be re-rendered for this change to appear.\n * @name showStack\n * @memberof dc.stackMixin\n * @instance\n * @param {String} stackName\n * @return {dc.stackMixin}\n */\n _chart.showStack = function (stackName) {\n var layer = findLayerByName(stackName);\n if (layer) {\n layer.hidden = false;\n }\n return _chart;\n };\n\n _chart.getValueAccessorByIndex = function (index) {\n return _stack[index].accessor || _chart.valueAccessor();\n };\n\n _chart.yAxisMin = function () {\n var min = d3.min(flattenStack(), function (p) {\n return (p.y + p.y0 < p.y0) ? (p.y + p.y0) : p.y0;\n });\n\n return dc.utils.subtract(min, _chart.yAxisPadding());\n\n };\n\n _chart.yAxisMax = function () {\n var max = d3.max(flattenStack(), function (p) {\n return p.y + p.y0;\n });\n\n return dc.utils.add(max, _chart.yAxisPadding());\n };\n\n function flattenStack () {\n var valueses = _chart.data().map(function (layer) { return layer.values; });\n return Array.prototype.concat.apply([], valueses);\n }\n\n _chart.xAxisMin = function () {\n var min = d3.min(flattenStack(), dc.pluck('x'));\n return dc.utils.subtract(min, _chart.xAxisPadding());\n };\n\n _chart.xAxisMax = function () {\n var max = d3.max(flattenStack(), dc.pluck('x'));\n return dc.utils.add(max, _chart.xAxisPadding());\n };\n\n /**\n * Set or get the title function. Chart class will use this function to render svg title (usually interpreted by\n * browser as tooltips) for each child element in the chart, i.e. a slice in a pie chart or a bubble in a bubble chart.\n * Almost every chart supports title function however in grid coordinate chart you need to turn off brush in order to\n * use title otherwise the brush layer will block tooltip trigger.\n *\n * If the first argument is a stack name, the title function will get or set the title for that stack. If stackName\n * is not provided, the first stack is implied.\n * @name title\n * @memberof dc.stackMixin\n * @instance\n * @example\n * // set a title function on 'first stack'\n * chart.title('first stack', function(d) { return d.key + ': ' + d.value; });\n * // get a title function from 'second stack'\n * var secondTitleFunction = chart.title('second stack');\n * @param {String} [stackName]\n * @param {Function} [titleAccessor]\n * @return {String}\n * @return {dc.stackMixin}\n */\n dc.override(_chart, 'title', function (stackName, titleAccessor) {\n if (!stackName) {\n return _chart._title();\n }\n\n if (typeof stackName === 'function') {\n return _chart._title(stackName);\n }\n if (stackName === _chart._groupName && typeof titleAccessor === 'function') {\n return _chart._title(titleAccessor);\n }\n\n if (typeof titleAccessor !== 'function') {\n return _titles[stackName] || _chart._title();\n }\n\n _titles[stackName] = titleAccessor;\n\n return _chart;\n });\n\n /**\n * Gets or sets the stack layout algorithm, which computes a baseline for each stack and\n * propagates it to the next\n * @name stackLayout\n * @memberof dc.stackMixin\n * @instance\n * @see {@link http://github.com/mbostock/d3/wiki/Stack-Layout d3.layout.stack}\n * @param {Function} [stack=d3.layout.stack]\n * @return {Function}\n * @return {dc.stackMixin}\n */\n _chart.stackLayout = function (stack) {\n if (!arguments.length) {\n return _stackLayout;\n }\n _stackLayout = stack;\n return _chart;\n };\n\n function visability (l) {\n return !l.hidden;\n }\n\n _chart.data(function () {\n var layers = _stack.filter(visability);\n return layers.length ? _chart.stackLayout()(layers) : [];\n });\n\n _chart._ordinalXDomain = function () {\n var flat = flattenStack().map(dc.pluck('data'));\n var ordered = _chart._computeOrderedGroups(flat);\n return ordered.map(_chart.keyAccessor());\n };\n\n _chart.colorAccessor(function (d) {\n var layer = this.layer || this.name || d.name || d.layer;\n return layer;\n });\n\n _chart.legendables = function () {\n return _stack.map(function (layer, i) {\n return {\n chart: _chart,\n name: layer.name,\n hidden: layer.hidden || false,\n color: _chart.getColor.call(layer, layer.values, i)\n };\n });\n };\n\n _chart.isLegendableHidden = function (d) {\n var layer = findLayerByName(d.name);\n return layer ? layer.hidden : false;\n };\n\n _chart.legendToggle = function (d) {\n if (_hidableStacks) {\n if (_chart.isLegendableHidden(d)) {\n _chart.showStack(d.name);\n } else {\n _chart.hideStack(d.name);\n }\n //_chart.redraw();\n _chart.renderGroup();\n }\n };\n\n return _chart;\n};\n","/**\n * Cap is a mixin that groups small data elements below a _cap_ into an *others* grouping for both the\n * Row and Pie Charts.\n *\n * The top ordered elements in the group up to the cap amount will be kept in the chart, and the rest\n * will be replaced with an *others* element, with value equal to the sum of the replaced values. The\n * keys of the elements below the cap limit are recorded in order to filter by those keys when the\n * others* element is clicked.\n * @name capMixin\n * @memberof dc\n * @mixin\n * @param {Object} _chart\n * @return {dc.capMixin}\n */\ndc.capMixin = function (_chart) {\n\n var _cap = Infinity;\n\n var _othersLabel = 'Others';\n\n var _othersGrouper = function (topRows) {\n var topRowsSum = d3.sum(topRows, _chart.valueAccessor()),\n allRows = _chart.group().all(),\n allRowsSum = d3.sum(allRows, _chart.valueAccessor()),\n topKeys = topRows.map(_chart.keyAccessor()),\n allKeys = allRows.map(_chart.keyAccessor()),\n topSet = d3.set(topKeys),\n others = allKeys.filter(function (d) {return !topSet.has(d);});\n if (allRowsSum > topRowsSum) {\n return topRows.concat([{'others': others, 'key': _othersLabel, 'value': allRowsSum - topRowsSum}]);\n }\n return topRows;\n };\n\n _chart.cappedKeyAccessor = function (d, i) {\n if (d.others) {\n return d.key;\n }\n return _chart.keyAccessor()(d, i);\n };\n\n _chart.cappedValueAccessor = function (d, i) {\n if (d.others) {\n return d.value;\n }\n return _chart.valueAccessor()(d, i);\n };\n\n _chart.data(function (group) {\n if (_cap === Infinity) {\n return _chart._computeOrderedGroups(group.all());\n } else {\n var topRows = group.top(_cap); // ordered by crossfilter group order (default value)\n topRows = _chart._computeOrderedGroups(topRows); // re-order using ordering (default key)\n if (_othersGrouper) {\n return _othersGrouper(topRows);\n }\n return topRows;\n }\n });\n\n /**\n * Get or set the count of elements to that will be included in the cap.\n * @name cap\n * @memberof dc.capMixin\n * @instance\n * @param {Number} [count=Infinity]\n * @return {Number}\n * @return {dc.capMixin}\n */\n _chart.cap = function (count) {\n if (!arguments.length) {\n return _cap;\n }\n _cap = count;\n return _chart;\n };\n\n /**\n * Get or set the label for *Others* slice when slices cap is specified\n * @name othersLabel\n * @memberof dc.capMixin\n * @instance\n * @param {String} [label=\"Others\"]\n * @return {String}\n * @return {dc.capMixin}\n */\n _chart.othersLabel = function (label) {\n if (!arguments.length) {\n return _othersLabel;\n }\n _othersLabel = label;\n return _chart;\n };\n\n /**\n * Get or set the grouper function that will perform the insertion of data for the *Others* slice\n * if the slices cap is specified. If set to a falsy value, no others will be added. By default the\n * grouper function computes the sum of all values below the cap.\n * @name othersGrouper\n * @memberof dc.capMixin\n * @instance\n * @example\n * // Default others grouper\n * chart.othersGrouper(function (topRows) {\n * var topRowsSum = d3.sum(topRows, _chart.valueAccessor()),\n * allRows = _chart.group().all(),\n * allRowsSum = d3.sum(allRows, _chart.valueAccessor()),\n * topKeys = topRows.map(_chart.keyAccessor()),\n * allKeys = allRows.map(_chart.keyAccessor()),\n * topSet = d3.set(topKeys),\n * others = allKeys.filter(function (d) {return !topSet.has(d);});\n * if (allRowsSum > topRowsSum) {\n * return topRows.concat([{'others': others, 'key': _othersLabel, 'value': allRowsSum - topRowsSum}]);\n * }\n * return topRows;\n * });\n * // Custom others grouper\n * chart.othersGrouper(function (data) {\n * // compute the value for others, presumably the sum of all values below the cap\n * var othersSum = yourComputeOthersValueLogic(data)\n *\n * // the keys are needed to properly filter when the others element is clicked\n * var othersKeys = yourComputeOthersKeysArrayLogic(data);\n *\n * // add the others row to the dataset\n * data.push({'key': 'Others', 'value': othersSum, 'others': othersKeys });\n *\n * return data;\n * });\n * @param {Function} [grouperFunction]\n * @return {Function}\n * @return {dc.capMixin}\n */\n _chart.othersGrouper = function (grouperFunction) {\n if (!arguments.length) {\n return _othersGrouper;\n }\n _othersGrouper = grouperFunction;\n return _chart;\n };\n\n dc.override(_chart, 'onClick', function (d) {\n if (d.others) {\n _chart.filter([d.others]);\n }\n _chart._onClick(d);\n });\n\n return _chart;\n};\n","/**\n * This Mixin provides reusable functionalities for any chart that needs to visualize data using bubbles.\n * @name bubbleMixin\n * @memberof dc\n * @mixin\n * @mixes dc.colorMixin\n * @param {Object} _chart\n * @return {dc.bubbleMixin}\n */\ndc.bubbleMixin = function (_chart) {\n var _maxBubbleRelativeSize = 0.3;\n var _minRadiusWithLabel = 10;\n\n _chart.BUBBLE_NODE_CLASS = 'node';\n _chart.BUBBLE_CLASS = 'bubble';\n _chart.MIN_RADIUS = 10;\n\n _chart = dc.colorMixin(_chart);\n\n _chart.renderLabel(true);\n\n _chart.data(function (group) {\n return group.top(Infinity);\n });\n\n var _r = d3.scale.linear().domain([0, 100]);\n\n var _rValueAccessor = function (d) {\n return d.r;\n };\n\n /**\n * Get or set the bubble radius scale. By default the bubble chart uses\n * `d3.scale.linear().domain([0, 100])` as its radius scale.\n * @name r\n * @memberof dc.bubbleMixin\n * @instance\n * @see {@link http://github.com/mbostock/d3/wiki/Scales d3.scale}\n * @param {d3.scale} [bubbleRadiusScale=d3.scale.linear().domain([0, 100])]\n * @return {d3.scale}\n * @return {dc.bubbleMixin}\n */\n _chart.r = function (bubbleRadiusScale) {\n if (!arguments.length) {\n return _r;\n }\n _r = bubbleRadiusScale;\n return _chart;\n };\n\n /**\n * Get or set the radius value accessor function. If set, the radius value accessor function will\n * be used to retrieve a data value for each bubble. The data retrieved then will be mapped using\n * the r scale to the actual bubble radius. This allows you to encode a data dimension using bubble\n * size.\n * @name radiusValueAccessor\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Function} [radiusValueAccessor]\n * @return {Function}\n * @return {dc.bubbleMixin}\n */\n _chart.radiusValueAccessor = function (radiusValueAccessor) {\n if (!arguments.length) {\n return _rValueAccessor;\n }\n _rValueAccessor = radiusValueAccessor;\n return _chart;\n };\n\n _chart.rMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return _chart.radiusValueAccessor()(e);\n });\n return min;\n };\n\n _chart.rMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return _chart.radiusValueAccessor()(e);\n });\n return max;\n };\n\n _chart.bubbleR = function (d) {\n var value = _chart.radiusValueAccessor()(d);\n var r = _chart.r()(value);\n if (isNaN(r) || value <= 0) {\n r = 0;\n }\n return r;\n };\n\n var labelFunction = function (d) {\n return _chart.label()(d);\n };\n\n var labelOpacity = function (d) {\n return (_chart.bubbleR(d) > _minRadiusWithLabel) ? 1 : 0;\n };\n\n _chart._doRenderLabel = function (bubbleGEnter) {\n if (_chart.renderLabel()) {\n var label = bubbleGEnter.select('text');\n\n if (label.empty()) {\n label = bubbleGEnter.append('text')\n .attr('text-anchor', 'middle')\n .attr('dy', '.3em')\n .on('click', _chart.onClick);\n }\n\n label\n .attr('opacity', 0)\n .text(labelFunction);\n dc.transition(label, _chart.transitionDuration())\n .attr('opacity', labelOpacity);\n }\n };\n\n _chart.doUpdateLabels = function (bubbleGEnter) {\n if (_chart.renderLabel()) {\n var labels = bubbleGEnter.selectAll('text')\n .text(labelFunction);\n dc.transition(labels, _chart.transitionDuration())\n .attr('opacity', labelOpacity);\n }\n };\n\n var titleFunction = function (d) {\n return _chart.title()(d);\n };\n\n _chart._doRenderTitles = function (g) {\n if (_chart.renderTitle()) {\n var title = g.select('title');\n\n if (title.empty()) {\n g.append('title').text(titleFunction);\n }\n }\n };\n\n _chart.doUpdateTitles = function (g) {\n if (_chart.renderTitle()) {\n g.selectAll('title').text(titleFunction);\n }\n };\n\n /**\n * Get or set the minimum radius. This will be used to initialize the radius scale's range.\n * @name minRadius\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Number} [radius=10]\n * @return {Number}\n * @return {dc.bubbleMixin}\n */\n _chart.minRadius = function (radius) {\n if (!arguments.length) {\n return _chart.MIN_RADIUS;\n }\n _chart.MIN_RADIUS = radius;\n return _chart;\n };\n\n /**\n * Get or set the minimum radius for label rendering. If a bubble's radius is less than this value\n * then no label will be rendered.\n * @name minRadiusWithLabel\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Number} [radius=10]\n * @return {Number}\n * @return {dc.bubbleMixin}\n */\n\n _chart.minRadiusWithLabel = function (radius) {\n if (!arguments.length) {\n return _minRadiusWithLabel;\n }\n _minRadiusWithLabel = radius;\n return _chart;\n };\n\n /**\n * Get or set the maximum relative size of a bubble to the length of x axis. This value is useful\n * when the difference in radius between bubbles is too great.\n * @name maxBubbleRelativeSize\n * @memberof dc.bubbleMixin\n * @instance\n * @param {Number} [relativeSize=0.3]\n * @return {Number}\n * @return {dc.bubbleMixin}\n */\n _chart.maxBubbleRelativeSize = function (relativeSize) {\n if (!arguments.length) {\n return _maxBubbleRelativeSize;\n }\n _maxBubbleRelativeSize = relativeSize;\n return _chart;\n };\n\n _chart.fadeDeselectedArea = function () {\n if (_chart.hasFilter()) {\n _chart.selectAll('g.' + _chart.BUBBLE_NODE_CLASS).each(function (d) {\n if (_chart.isSelectedNode(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n _chart.selectAll('g.' + _chart.BUBBLE_NODE_CLASS).each(function () {\n _chart.resetHighlight(this);\n });\n }\n };\n\n _chart.isSelectedNode = function (d) {\n return _chart.hasFilter(d.key);\n };\n\n _chart.onClick = function (d) {\n var filter = d.key;\n dc.events.trigger(function () {\n _chart.filter(filter);\n _chart.redrawGroup();\n });\n };\n\n return _chart;\n};\n","/**\n * The pie chart implementation is usually used to visualize a small categorical distribution. The pie\n * chart uses keyAccessor to determine the slices, and valueAccessor to calculate the size of each\n * slice relative to the sum of all values. Slices are ordered by `.ordering` which defaults to sorting\n * by key.\n * @name pieChart\n * @memberof dc\n * @mixes dc.capMixin\n * @mixes dc.colorMixin\n * @mixes dc.baseMixin\n * @example\n * // create a pie chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.pieChart('#chart-container1');\n * // create a pie chart under #chart-container2 element using chart group A\n * var chart2 = dc.pieChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {PieChart}\n */\ndc.pieChart = function (parent, chartGroup) {\n var DEFAULT_MIN_ANGLE_FOR_LABEL = 0.5;\n\n var _sliceCssClass = 'pie-slice';\n var _emptyCssClass = 'empty-chart';\n var _emptyTitle = 'empty';\n\n var _radius,\n _givenRadius, // specified radius, if any\n _innerRadius = 0,\n _externalRadiusPadding = 0;\n\n var _g;\n var _cx;\n var _cy;\n var _minAngleForLabel = DEFAULT_MIN_ANGLE_FOR_LABEL;\n var _externalLabelRadius;\n var _chart = dc.capMixin(dc.colorMixin(dc.baseMixin({})));\n\n _chart.colorAccessor(_chart.cappedKeyAccessor);\n\n _chart.title(function (d) {\n return _chart.cappedKeyAccessor(d) + ': ' + _chart.cappedValueAccessor(d);\n });\n\n /**\n * Get or set the maximum number of slices the pie chart will generate. The top slices are determined by\n * value from high to low. Other slices exeeding the cap will be rolled up into one single *Others* slice.\n * @name slicesCap\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [cap]\n * @returns {Chart}\n */\n _chart.slicesCap = _chart.cap;\n\n _chart.label(_chart.cappedKeyAccessor);\n _chart.renderLabel(true);\n\n _chart.transitionDuration(350);\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _g = _chart.svg()\n .append('g')\n .attr('transform', 'translate(' + _chart.cx() + ',' + _chart.cy() + ')');\n\n drawChart();\n\n return _chart;\n };\n\n function drawChart () {\n // set radius on basis of chart dimension if missing\n _radius = _givenRadius ? _givenRadius : d3.min([_chart.width(), _chart.height()]) / 2;\n\n var arc = buildArcs();\n\n var pie = pieLayout();\n var pieData;\n // if we have data...\n if (d3.sum(_chart.data(), _chart.valueAccessor())) {\n pieData = pie(_chart.data());\n _g.classed(_emptyCssClass, false);\n } else {\n // otherwise we'd be getting NaNs, so override\n // note: abuse others for its ignoring the value accessor\n pieData = pie([{key: _emptyTitle, value: 1, others: [_emptyTitle]}]);\n _g.classed(_emptyCssClass, true);\n }\n\n if (_g) {\n var slices = _g.selectAll('g.' + _sliceCssClass)\n .data(pieData);\n\n createElements(slices, arc, pieData);\n\n updateElements(pieData, arc);\n\n removeElements(slices);\n\n highlightFilter();\n\n dc.transition(_g, _chart.transitionDuration())\n .attr('transform', 'translate(' + _chart.cx() + ',' + _chart.cy() + ')');\n }\n }\n\n function createElements (slices, arc, pieData) {\n var slicesEnter = createSliceNodes(slices);\n\n createSlicePath(slicesEnter, arc);\n\n createTitles(slicesEnter);\n\n createLabels(pieData, arc);\n }\n\n function createSliceNodes (slices) {\n var slicesEnter = slices\n .enter()\n .append('g')\n .attr('class', function (d, i) {\n return _sliceCssClass + ' _' + i;\n });\n return slicesEnter;\n }\n\n function createSlicePath (slicesEnter, arc) {\n var slicePath = slicesEnter.append('path')\n .attr('fill', fill)\n .on('click', onClick)\n .attr('d', function (d, i) {\n return safeArc(d, i, arc);\n });\n\n dc.transition(slicePath, _chart.transitionDuration(), function (s) {\n s.attrTween('d', tweenPie);\n });\n }\n\n function createTitles (slicesEnter) {\n if (_chart.renderTitle()) {\n slicesEnter.append('title').text(function (d) {\n return _chart.title()(d.data);\n });\n }\n }\n\n function positionLabels (labelsEnter, arc) {\n dc.transition(labelsEnter, _chart.transitionDuration())\n .attr('transform', function (d) {\n return labelPosition(d, arc);\n })\n .attr('text-anchor', 'middle')\n .text(function (d) {\n var data = d.data;\n if ((sliceHasNoData(data) || sliceTooSmall(d)) && !isSelectedSlice(d)) {\n return '';\n }\n return _chart.label()(d.data);\n });\n }\n\n function createLabels (pieData, arc) {\n if (_chart.renderLabel()) {\n var labels = _g.selectAll('text.' + _sliceCssClass)\n .data(pieData);\n\n labels.exit().remove();\n\n var labelsEnter = labels\n .enter()\n .append('text')\n .attr('class', function (d, i) {\n var classes = _sliceCssClass + ' _' + i;\n if (_externalLabelRadius) {\n classes += ' external';\n }\n return classes;\n })\n .on('click', onClick);\n positionLabels(labelsEnter, arc);\n }\n }\n\n function updateElements (pieData, arc) {\n updateSlicePaths(pieData, arc);\n updateLabels(pieData, arc);\n updateTitles(pieData);\n }\n\n function updateSlicePaths (pieData, arc) {\n var slicePaths = _g.selectAll('g.' + _sliceCssClass)\n .data(pieData)\n .select('path')\n .attr('d', function (d, i) {\n return safeArc(d, i, arc);\n });\n dc.transition(slicePaths, _chart.transitionDuration(),\n function (s) {\n s.attrTween('d', tweenPie);\n }).attr('fill', fill);\n }\n\n function updateLabels (pieData, arc) {\n if (_chart.renderLabel()) {\n var labels = _g.selectAll('text.' + _sliceCssClass)\n .data(pieData);\n positionLabels(labels, arc);\n }\n }\n\n function updateTitles (pieData) {\n if (_chart.renderTitle()) {\n _g.selectAll('g.' + _sliceCssClass)\n .data(pieData)\n .select('title')\n .text(function (d) {\n return _chart.title()(d.data);\n });\n }\n }\n\n function removeElements (slices) {\n slices.exit().remove();\n }\n\n function highlightFilter () {\n if (_chart.hasFilter()) {\n _chart.selectAll('g.' + _sliceCssClass).each(function (d) {\n if (isSelectedSlice(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n _chart.selectAll('g.' + _sliceCssClass).each(function () {\n _chart.resetHighlight(this);\n });\n }\n }\n\n /**\n * Get or set the external radius padding of the pie chart. This will force the radius of the\n * pie chart to become smaller or larger depending on the value.\n * @name externalRadiusPadding\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [externalRadiusPadding=0]\n * @returns {Chart}\n */\n _chart.externalRadiusPadding = function (externalRadiusPadding) {\n if (!arguments.length) {\n return _externalRadiusPadding;\n }\n _externalRadiusPadding = externalRadiusPadding;\n return _chart;\n };\n\n /**\n * Get or set the inner radius of the pie chart. If the inner radius is greater than 0px then the\n * pie chart will be rendered as a doughnut chart.\n * @name innerRadius\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [innerRadius=0]\n * @returns {Chart}\n */\n _chart.innerRadius = function (innerRadius) {\n if (!arguments.length) {\n return _innerRadius;\n }\n _innerRadius = innerRadius;\n return _chart;\n };\n\n /**\n * Get or set the outer radius. If the radius is not set, it will be half of the minimum of the\n * chart width and height.\n * @name radius\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [radius]\n * @returns {Chart}\n */\n _chart.radius = function (radius) {\n if (!arguments.length) {\n return _givenRadius;\n }\n _givenRadius = radius;\n return _chart;\n };\n\n /**\n * Get or set center x coordinate position. Default is center of svg.\n * @name cx\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [cx]\n * @returns {Chart}\n */\n _chart.cx = function (cx) {\n if (!arguments.length) {\n return (_cx || _chart.width() / 2);\n }\n _cx = cx;\n return _chart;\n };\n\n /**\n * Get or set center y coordinate position. Default is center of svg.\n * @name cy\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [cy]\n * @returns {Chart}\n */\n _chart.cy = function (cy) {\n if (!arguments.length) {\n return (_cy || _chart.height() / 2);\n }\n _cy = cy;\n return _chart;\n };\n\n function buildArcs () {\n return d3.svg.arc().outerRadius(_radius - _externalRadiusPadding).innerRadius(_innerRadius);\n }\n\n function isSelectedSlice (d) {\n return _chart.hasFilter(_chart.cappedKeyAccessor(d.data));\n }\n\n _chart._doRedraw = function () {\n drawChart();\n return _chart;\n };\n\n /**\n * Get or set the minimal slice angle for label rendering. Any slice with a smaller angle will not\n * display a slice label.\n * @name minAngleForLabel\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [minAngleForLabel=0.5]\n * @returns {Chart}\n */\n _chart.minAngleForLabel = function (minAngleForLabel) {\n if (!arguments.length) {\n return _minAngleForLabel;\n }\n _minAngleForLabel = minAngleForLabel;\n return _chart;\n };\n\n function pieLayout () {\n return d3.layout.pie().sort(null).value(_chart.cappedValueAccessor);\n }\n\n function sliceTooSmall (d) {\n var angle = (d.endAngle - d.startAngle);\n return isNaN(angle) || angle < _minAngleForLabel;\n }\n\n function sliceHasNoData (d) {\n return _chart.cappedValueAccessor(d) === 0;\n }\n\n function tweenPie (b) {\n b.innerRadius = _innerRadius;\n var current = this._current;\n if (isOffCanvas(current)) {\n current = {startAngle: 0, endAngle: 0};\n }\n var i = d3.interpolate(current, b);\n this._current = i(0);\n return function (t) {\n return safeArc(i(t), 0, buildArcs());\n };\n }\n\n function isOffCanvas (current) {\n return !current || isNaN(current.startAngle) || isNaN(current.endAngle);\n }\n\n function fill (d, i) {\n return _chart.getColor(d.data, i);\n }\n\n function onClick (d, i) {\n if (_g.attr('class') !== _emptyCssClass) {\n _chart.onClick(d.data, i);\n }\n }\n\n function safeArc (d, i, arc) {\n var path = arc(d, i);\n if (path.indexOf('NaN') >= 0) {\n path = 'M0,0';\n }\n return path;\n }\n\n /**\n * Title to use for the only slice when there is no data.\n * @name emptyTitle\n * @memberof dc.pieChart\n * @instance\n * @param {String} [title]\n * @returns {Chart}\n */\n _chart.emptyTitle = function (title) {\n if (arguments.length === 0) {\n return _emptyTitle;\n }\n _emptyTitle = title;\n return _chart;\n };\n\n /**\n * Position slice labels offset from the outer edge of the chart\n *\n * The given argument sets the radial offset.\n * @name externalLabels\n * @memberof dc.pieChart\n * @instance\n * @param {Number} [radius]\n * @returns {Chart}\n */\n _chart.externalLabels = function (radius) {\n if (arguments.length === 0) {\n return _externalLabelRadius;\n } else if (radius) {\n _externalLabelRadius = radius;\n } else {\n _externalLabelRadius = undefined;\n }\n\n return _chart;\n };\n\n function labelPosition (d, arc) {\n var centroid;\n if (_externalLabelRadius) {\n centroid = d3.svg.arc()\n .outerRadius(_radius - _externalRadiusPadding + _externalLabelRadius)\n .innerRadius(_radius - _externalRadiusPadding + _externalLabelRadius)\n .centroid(d);\n } else {\n centroid = arc.centroid(d);\n }\n if (isNaN(centroid[0]) || isNaN(centroid[1])) {\n return 'translate(0,0)';\n } else {\n return 'translate(' + centroid + ')';\n }\n }\n\n _chart.legendables = function () {\n return _chart.data().map(function (d, i) {\n var legendable = {name: d.key, data: d.value, others: d.others, chart: _chart};\n legendable.color = _chart.getColor(d, i);\n return legendable;\n });\n };\n\n _chart.legendHighlight = function (d) {\n highlightSliceFromLegendable(d, true);\n };\n\n _chart.legendReset = function (d) {\n highlightSliceFromLegendable(d, false);\n };\n\n _chart.legendToggle = function (d) {\n _chart.onClick({key: d.name, others: d.others});\n };\n\n function highlightSliceFromLegendable (legendable, highlighted) {\n _chart.selectAll('g.pie-slice').each(function (d) {\n if (legendable.name === d.data.key) {\n d3.select(this).classed('highlight', highlighted);\n }\n });\n }\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Concrete bar chart/histogram implementation.\n *\n * Examples:\n * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/)\n * - [Canadian City Crime Stats](http://dc-js.github.com/dc.js/crime/index.html)\n * @name barChart\n * @memberof dc\n * @mixes dc.stackMixin\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a bar chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.barChart('#chart-container1');\n * // create a bar chart under #chart-container2 element using chart group A\n * var chart2 = dc.barChart('#chart-container2', 'chartGroupA');\n * // create a sub-chart under a composite parent chart\n * var chart3 = dc.barChart(compositeChart);\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @return {dc.barChart}\n */\ndc.barChart = function (parent, chartGroup) {\n var MIN_BAR_WIDTH = 1;\n var DEFAULT_GAP_BETWEEN_BARS = 2;\n\n var _chart = dc.stackMixin(dc.coordinateGridMixin({}));\n\n var _gap = DEFAULT_GAP_BETWEEN_BARS;\n var _centerBar = false;\n var _alwaysUseRounding = false;\n\n var _barWidth;\n\n dc.override(_chart, 'rescale', function () {\n _chart._rescale();\n _barWidth = undefined;\n return _chart;\n });\n\n dc.override(_chart, 'render', function () {\n if (_chart.round() && _centerBar && !_alwaysUseRounding) {\n dc.logger.warn('By default, brush rounding is disabled if bars are centered. ' +\n 'See dc.js bar chart API documentation for details.');\n }\n\n return _chart._render();\n });\n\n _chart.plotData = function () {\n var layers = _chart.chartBodyG().selectAll('g.stack')\n .data(_chart.data());\n\n calculateBarWidth();\n\n layers\n .enter()\n .append('g')\n .attr('class', function (d, i) {\n return 'stack ' + '_' + i;\n });\n\n layers.each(function (d, i) {\n var layer = d3.select(this);\n\n renderBars(layer, i, d);\n });\n };\n\n function barHeight (d) {\n return dc.utils.safeNumber(Math.abs(_chart.y()(d.y + d.y0) - _chart.y()(d.y0)));\n }\n\n function renderBars (layer, layerIndex, d) {\n var bars = layer.selectAll('rect.bar')\n .data(d.values, dc.pluck('x'));\n\n var enter = bars.enter()\n .append('rect')\n .attr('class', 'bar')\n .attr('fill', dc.pluck('data', _chart.getColor))\n .attr('y', _chart.yAxisHeight())\n .attr('height', 0);\n\n if (_chart.renderTitle()) {\n enter.append('title').text(dc.pluck('data', _chart.title(d.name)));\n }\n\n if (_chart.isOrdinal()) {\n bars.on('click', _chart.onClick);\n }\n\n dc.transition(bars, _chart.transitionDuration())\n .attr('x', function (d) {\n var x = _chart.x()(d.x);\n if (_centerBar) {\n x -= _barWidth / 2;\n }\n if (_chart.isOrdinal() && _gap !== undefined) {\n x += _gap / 2;\n }\n return dc.utils.safeNumber(x);\n })\n .attr('y', function (d) {\n var y = _chart.y()(d.y + d.y0);\n\n if (d.y < 0) {\n y -= barHeight(d);\n }\n\n return dc.utils.safeNumber(y);\n })\n .attr('width', _barWidth)\n .attr('height', function (d) {\n return barHeight(d);\n })\n .attr('fill', dc.pluck('data', _chart.getColor))\n .select('title').text(dc.pluck('data', _chart.title(d.name)));\n\n dc.transition(bars.exit(), _chart.transitionDuration())\n .attr('height', 0)\n .remove();\n }\n\n function calculateBarWidth () {\n if (_barWidth === undefined) {\n var numberOfBars = _chart.xUnitCount();\n\n // please can't we always use rangeBands for bar charts?\n if (_chart.isOrdinal() && _gap === undefined) {\n _barWidth = Math.floor(_chart.x().rangeBand());\n } else if (_gap) {\n _barWidth = Math.floor((_chart.xAxisLength() - (numberOfBars - 1) * _gap) / numberOfBars);\n } else {\n _barWidth = Math.floor(_chart.xAxisLength() / (1 + _chart.barPadding()) / numberOfBars);\n }\n\n if (_barWidth === Infinity || isNaN(_barWidth) || _barWidth < MIN_BAR_WIDTH) {\n _barWidth = MIN_BAR_WIDTH;\n }\n }\n }\n\n _chart.fadeDeselectedArea = function () {\n var bars = _chart.chartBodyG().selectAll('rect.bar');\n var extent = _chart.brush().extent();\n\n if (_chart.isOrdinal()) {\n if (_chart.hasFilter()) {\n bars.classed(dc.constants.SELECTED_CLASS, function (d) {\n return _chart.hasFilter(d.x);\n });\n bars.classed(dc.constants.DESELECTED_CLASS, function (d) {\n return !_chart.hasFilter(d.x);\n });\n } else {\n bars.classed(dc.constants.SELECTED_CLASS, false);\n bars.classed(dc.constants.DESELECTED_CLASS, false);\n }\n } else {\n if (!_chart.brushIsEmpty(extent)) {\n var start = extent[0];\n var end = extent[1];\n\n bars.classed(dc.constants.DESELECTED_CLASS, function (d) {\n return d.x < start || d.x >= end;\n });\n } else {\n bars.classed(dc.constants.DESELECTED_CLASS, false);\n }\n }\n };\n\n /**\n * Whether the bar chart will render each bar centered around the data position on the x-axis.\n * @name centerBar\n * @memberof dc.barChart\n * @instance\n * @param {Boolean} [centerBar=false]\n * @return {Boolean}\n * @return {dc.barChart}\n */\n _chart.centerBar = function (centerBar) {\n if (!arguments.length) {\n return _centerBar;\n }\n _centerBar = centerBar;\n return _chart;\n };\n\n dc.override(_chart, 'onClick', function (d) {\n _chart._onClick(d.data);\n });\n\n /**\n * Get or set the spacing between bars as a fraction of bar size. Valid values are between 0-1.\n * Setting this value will also remove any previously set `gap`. See the\n * [d3 docs](https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-ordinal_rangeBands)\n * for a visual description of how the padding is applied.\n * @name barPadding\n * @memberof dc.barChart\n * @instance\n * @param {Number} [barPadding=0]\n * @return {Number}\n * @return {dc.barChart}\n */\n _chart.barPadding = function (barPadding) {\n if (!arguments.length) {\n return _chart._rangeBandPadding();\n }\n _chart._rangeBandPadding(barPadding);\n _gap = undefined;\n return _chart;\n };\n\n _chart._useOuterPadding = function () {\n return _gap === undefined;\n };\n\n /**\n * Get or set the outer padding on an ordinal bar chart. This setting has no effect on non-ordinal charts.\n * Will pad the width by `padding * barWidth` on each side of the chart.\n * @name outerPadding\n * @memberof dc.barChart\n * @instance\n * @param {Number} [padding=0.5]\n * @return {Number}\n * @return {dc.barChart}\n */\n _chart.outerPadding = _chart._outerRangeBandPadding;\n\n /**\n * Manually set fixed gap (in px) between bars instead of relying on the default auto-generated\n * gap. By default the bar chart implementation will calculate and set the gap automatically\n * based on the number of data points and the length of the x axis.\n * @name gap\n * @memberof dc.barChart\n * @instance\n * @param {Number} [gap=2]\n * @return {Number}\n * @return {dc.barChart}\n */\n _chart.gap = function (gap) {\n if (!arguments.length) {\n return _gap;\n }\n _gap = gap;\n return _chart;\n };\n\n _chart.extendBrush = function () {\n var extent = _chart.brush().extent();\n if (_chart.round() && (!_centerBar || _alwaysUseRounding)) {\n extent[0] = extent.map(_chart.round())[0];\n extent[1] = extent.map(_chart.round())[1];\n\n _chart.chartBodyG().select('.brush')\n .call(_chart.brush().extent(extent));\n }\n\n return extent;\n };\n\n /**\n * Set or get whether rounding is enabled when bars are centered. If false, using\n * rounding with centered bars will result in a warning and rounding will be ignored. This flag\n * has no effect if bars are not {@link #dc.barChart+centerBar centered}.\n * When using standard d3.js rounding methods, the brush often doesn't align correctly with\n * centered bars since the bars are offset. The rounding function must add an offset to\n * compensate, such as in the following example.\n * @name alwaysUseRounding\n * @memberof dc.barChart\n * @instance\n * @example\n * chart.round(function(n) { return Math.floor(n) + 0.5; });\n * @param {Boolean} [alwaysUseRounding=false]\n * @return {Boolean}\n * @return {dc.barChart}\n */\n _chart.alwaysUseRounding = function (alwaysUseRounding) {\n if (!arguments.length) {\n return _alwaysUseRounding;\n }\n _alwaysUseRounding = alwaysUseRounding;\n return _chart;\n };\n\n function colorFilter (color, inv) {\n return function () {\n var item = d3.select(this);\n var match = item.attr('fill') === color;\n return inv ? !match : match;\n };\n }\n\n _chart.legendHighlight = function (d) {\n if (!_chart.isLegendableHidden(d)) {\n _chart.g().selectAll('rect.bar')\n .classed('highlight', colorFilter(d.color))\n .classed('fadeout', colorFilter(d.color, true));\n }\n };\n\n _chart.legendReset = function () {\n _chart.g().selectAll('rect.bar')\n .classed('highlight', false)\n .classed('fadeout', false);\n };\n\n dc.override(_chart, 'xAxisMax', function () {\n var max = this._xAxisMax();\n if ('resolution' in _chart.xUnits()) {\n var res = _chart.xUnits().resolution;\n max += res;\n }\n return max;\n });\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Concrete line/area chart implementation.\n * Examples:\n * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/)\n * - [Canadian City Crime Stats](http://dc-js.github.com/dc.js/crime/index.html)\n * @name lineChart\n * @memberof dc\n * @mixes dc.stackMixin\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a line chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.lineChart('#chart-container1');\n * // create a line chart under #chart-container2 element using chart group A\n * var chart2 = dc.lineChart('#chart-container2', 'chartGroupA');\n * // create a sub-chart under a composite parent chart\n * var chart3 = dc.lineChart(compositeChart);\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {LineChart}\n */\ndc.lineChart = function (parent, chartGroup) {\n var DEFAULT_DOT_RADIUS = 5;\n var TOOLTIP_G_CLASS = 'dc-tooltip';\n var DOT_CIRCLE_CLASS = 'dot';\n var Y_AXIS_REF_LINE_CLASS = 'yRef';\n var X_AXIS_REF_LINE_CLASS = 'xRef';\n var DEFAULT_DOT_OPACITY = 1e-6;\n\n var _chart = dc.stackMixin(dc.coordinateGridMixin({}));\n var _renderArea = false;\n var _dotRadius = DEFAULT_DOT_RADIUS;\n var _dataPointRadius = null;\n var _dataPointFillOpacity = DEFAULT_DOT_OPACITY;\n var _dataPointStrokeOpacity = DEFAULT_DOT_OPACITY;\n var _interpolate = 'linear';\n var _tension = 0.7;\n var _defined;\n var _dashStyle;\n var _xyTipsOn = true;\n\n _chart.transitionDuration(500);\n _chart._rangeBandPadding(1);\n\n _chart.plotData = function () {\n var chartBody = _chart.chartBodyG();\n var layersList = chartBody.selectAll('g.stack-list');\n\n if (layersList.empty()) {\n layersList = chartBody.append('g').attr('class', 'stack-list');\n }\n\n var layers = layersList.selectAll('g.stack').data(_chart.data());\n\n var layersEnter = layers\n .enter()\n .append('g')\n .attr('class', function (d, i) {\n return 'stack ' + '_' + i;\n });\n\n drawLine(layersEnter, layers);\n\n drawArea(layersEnter, layers);\n\n drawDots(chartBody, layers);\n };\n\n /**\n * Gets or sets the interpolator to use for lines drawn, by string name, allowing e.g. step\n * functions, splines, and cubic interpolation. This is passed to\n * [d3.svg.line.interpolate](https://github.com/mbostock/d3/wiki/SVG-Shapes#line_interpolate) and\n * [d3.svg.area.interpolate](https://github.com/mbostock/d3/wiki/SVG-Shapes#area_interpolate),\n * where you can find a complete list of valid arguments\n * @name interpolate\n * @memberof dc.lineChart\n * @instance\n * @param {String} [interpolate='linear']\n * @returns {Chart}\n */\n _chart.interpolate = function (interpolate) {\n if (!arguments.length) {\n return _interpolate;\n }\n _interpolate = interpolate;\n return _chart;\n };\n\n /**\n * Gets or sets the tension to use for lines drawn, in the range 0 to 1.\n * This parameter further customizes the interpolation behavior. It is passed to\n * [d3.svg.line.tension](https://github.com/mbostock/d3/wiki/SVG-Shapes#line_tension) and\n * [d3.svg.area.tension](https://github.com/mbostock/d3/wiki/SVG-Shapes#area_tension).\n * @name tension\n * @memberof dc.lineChart\n * @instance\n * @param {Number} [tension=0.7]\n * @returns {Chart}\n */\n _chart.tension = function (tension) {\n if (!arguments.length) {\n return _tension;\n }\n _tension = tension;\n return _chart;\n };\n\n /**\n * Gets or sets a function that will determine discontinuities in the line which should be\n * skipped: the path will be broken into separate subpaths if some points are undefined.\n * This function is passed to\n * [d3.svg.line.defined](https://github.com/mbostock/d3/wiki/SVG-Shapes#line_defined)\n *\n * Note: crossfilter will sometimes coerce nulls to 0, so you may need to carefully write\n * custom reduce functions to get this to work, depending on your data. See\n * https://github.com/dc-js/dc.js/issues/615#issuecomment-49089248\n * @name defined\n * @memberof dc.lineChart\n * @instance\n * @param {Function} [defined]\n * @returns {Chart}\n */\n _chart.defined = function (defined) {\n if (!arguments.length) {\n return _defined;\n }\n _defined = defined;\n return _chart;\n };\n\n /**\n * Set the line's d3 dashstyle. This value becomes the 'stroke-dasharray' of line. Defaults to empty\n * array (solid line).\n * @name dashStyle\n * @memberof dc.lineChart\n * @instance\n * @example\n * // create a Dash Dot Dot Dot\n * chart.dashStyle([3,1,1,1]);\n * @param {Array} [dashStyle=[]]\n * @returns {Chart}\n */\n _chart.dashStyle = function (dashStyle) {\n if (!arguments.length) {\n return _dashStyle;\n }\n _dashStyle = dashStyle;\n return _chart;\n };\n\n /**\n * Get or set render area flag. If the flag is set to true then the chart will render the area\n * beneath each line and the line chart effectively becomes an area chart.\n * @name renderArea\n * @memberof dc.lineChart\n * @instance\n * @param {Boolean} [renderArea=false]\n * @returns {Chart}\n */\n _chart.renderArea = function (renderArea) {\n if (!arguments.length) {\n return _renderArea;\n }\n _renderArea = renderArea;\n return _chart;\n };\n\n function colors (d, i) {\n return _chart.getColor.call(d, d.values, i);\n }\n\n function drawLine (layersEnter, layers) {\n var line = d3.svg.line()\n .x(function (d) {\n return _chart.x()(d.x);\n })\n .y(function (d) {\n return _chart.y()(d.y + d.y0);\n })\n .interpolate(_interpolate)\n .tension(_tension);\n if (_defined) {\n line.defined(_defined);\n }\n\n var path = layersEnter.append('path')\n .attr('class', 'line')\n .attr('stroke', colors);\n if (_dashStyle) {\n path.attr('stroke-dasharray', _dashStyle);\n }\n\n dc.transition(layers.select('path.line'), _chart.transitionDuration())\n //.ease('linear')\n .attr('stroke', colors)\n .attr('d', function (d) {\n return safeD(line(d.values));\n });\n }\n\n function drawArea (layersEnter, layers) {\n if (_renderArea) {\n var area = d3.svg.area()\n .x(function (d) {\n return _chart.x()(d.x);\n })\n .y(function (d) {\n return _chart.y()(d.y + d.y0);\n })\n .y0(function (d) {\n return _chart.y()(d.y0);\n })\n .interpolate(_interpolate)\n .tension(_tension);\n if (_defined) {\n area.defined(_defined);\n }\n\n layersEnter.append('path')\n .attr('class', 'area')\n .attr('fill', colors)\n .attr('d', function (d) {\n return safeD(area(d.values));\n });\n\n dc.transition(layers.select('path.area'), _chart.transitionDuration())\n //.ease('linear')\n .attr('fill', colors)\n .attr('d', function (d) {\n return safeD(area(d.values));\n });\n }\n }\n\n function safeD (d) {\n return (!d || d.indexOf('NaN') >= 0) ? 'M0,0' : d;\n }\n\n function drawDots (chartBody, layers) {\n if (!_chart.brushOn() && _chart.xyTipsOn()) {\n var tooltipListClass = TOOLTIP_G_CLASS + '-list';\n var tooltips = chartBody.select('g.' + tooltipListClass);\n\n if (tooltips.empty()) {\n tooltips = chartBody.append('g').attr('class', tooltipListClass);\n }\n\n layers.each(function (d, layerIndex) {\n var points = d.values;\n if (_defined) {\n points = points.filter(_defined);\n }\n\n var g = tooltips.select('g.' + TOOLTIP_G_CLASS + '._' + layerIndex);\n if (g.empty()) {\n g = tooltips.append('g').attr('class', TOOLTIP_G_CLASS + ' _' + layerIndex);\n }\n\n createRefLines(g);\n\n var dots = g.selectAll('circle.' + DOT_CIRCLE_CLASS)\n .data(points, dc.pluck('x'));\n\n dots.enter()\n .append('circle')\n .attr('class', DOT_CIRCLE_CLASS)\n .attr('r', getDotRadius())\n .style('fill-opacity', _dataPointFillOpacity)\n .style('stroke-opacity', _dataPointStrokeOpacity)\n .on('mousemove', function () {\n var dot = d3.select(this);\n showDot(dot);\n showRefLines(dot, g);\n })\n .on('mouseout', function () {\n var dot = d3.select(this);\n hideDot(dot);\n hideRefLines(g);\n });\n\n dots\n .attr('cx', function (d) {\n return dc.utils.safeNumber(_chart.x()(d.x));\n })\n .attr('cy', function (d) {\n return dc.utils.safeNumber(_chart.y()(d.y + d.y0));\n })\n .attr('fill', _chart.getColor)\n .call(renderTitle, d);\n\n dots.exit().remove();\n });\n }\n }\n\n function createRefLines (g) {\n var yRefLine = g.select('path.' + Y_AXIS_REF_LINE_CLASS).empty() ?\n g.append('path').attr('class', Y_AXIS_REF_LINE_CLASS) : g.select('path.' + Y_AXIS_REF_LINE_CLASS);\n yRefLine.style('display', 'none').attr('stroke-dasharray', '5,5');\n\n var xRefLine = g.select('path.' + X_AXIS_REF_LINE_CLASS).empty() ?\n g.append('path').attr('class', X_AXIS_REF_LINE_CLASS) : g.select('path.' + X_AXIS_REF_LINE_CLASS);\n xRefLine.style('display', 'none').attr('stroke-dasharray', '5,5');\n }\n\n function showDot (dot) {\n dot.style('fill-opacity', 0.8);\n dot.style('stroke-opacity', 0.8);\n dot.attr('r', _dotRadius);\n return dot;\n }\n\n function showRefLines (dot, g) {\n var x = dot.attr('cx');\n var y = dot.attr('cy');\n var yAxisX = (_chart._yAxisX() - _chart.margins().left);\n var yAxisRefPathD = 'M' + yAxisX + ' ' + y + 'L' + (x) + ' ' + (y);\n var xAxisRefPathD = 'M' + x + ' ' + _chart.yAxisHeight() + 'L' + x + ' ' + y;\n g.select('path.' + Y_AXIS_REF_LINE_CLASS).style('display', '').attr('d', yAxisRefPathD);\n g.select('path.' + X_AXIS_REF_LINE_CLASS).style('display', '').attr('d', xAxisRefPathD);\n }\n\n function getDotRadius () {\n return _dataPointRadius || _dotRadius;\n }\n\n function hideDot (dot) {\n dot.style('fill-opacity', _dataPointFillOpacity)\n .style('stroke-opacity', _dataPointStrokeOpacity)\n .attr('r', getDotRadius());\n }\n\n function hideRefLines (g) {\n g.select('path.' + Y_AXIS_REF_LINE_CLASS).style('display', 'none');\n g.select('path.' + X_AXIS_REF_LINE_CLASS).style('display', 'none');\n }\n\n function renderTitle (dot, d) {\n if (_chart.renderTitle()) {\n dot.selectAll('title').remove();\n dot.append('title').text(dc.pluck('data', _chart.title(d.name)));\n }\n }\n\n /**\n * Turn on/off the mouseover behavior of an individual data point which renders a circle and x/y axis\n * dashed lines back to each respective axis. This is ignored if the chart brush is on (`brushOn`)\n * @name xyTipsOn\n * @memberof dc.lineChart\n * @instance\n * @param {Boolean} [xyTipsOn=false]\n * @returns {Chart}\n */\n _chart.xyTipsOn = function (xyTipsOn) {\n if (!arguments.length) {\n return _xyTipsOn;\n }\n _xyTipsOn = xyTipsOn;\n return _chart;\n };\n\n /**\n * Get or set the radius (in px) for dots displayed on the data points.\n * @name dotRadius\n * @memberof dc.lineChart\n * @instance\n * @param {Number} [dotRadius=5]\n * @returns {Chart}\n */\n _chart.dotRadius = function (dotRadius) {\n if (!arguments.length) {\n return _dotRadius;\n }\n _dotRadius = dotRadius;\n return _chart;\n };\n\n /**\n * Always show individual dots for each datapoint.\n * If `options` is falsy, it disables data point rendering.\n *\n * If no `options` are provided, the current `options` values are instead returned.\n * @name renderDataPoints\n * @memberof dc.lineChart\n * @instance\n * @example\n * chart.renderDataPoints({radius: 2, fillOpacity: 0.8, strokeOpacity: 0.8})\n * @param {{fillOpacity: Number, strokeOpacity: Number, radius: Number}} [options={fillOpacity: 0.8, strokeOpacity: 0.8, radius: 2}]\n * @returns {Chart}\n */\n _chart.renderDataPoints = function (options) {\n if (!arguments.length) {\n return {\n fillOpacity: _dataPointFillOpacity,\n strokeOpacity: _dataPointStrokeOpacity,\n radius: _dataPointRadius\n };\n } else if (!options) {\n _dataPointFillOpacity = DEFAULT_DOT_OPACITY;\n _dataPointStrokeOpacity = DEFAULT_DOT_OPACITY;\n _dataPointRadius = null;\n } else {\n _dataPointFillOpacity = options.fillOpacity || 0.8;\n _dataPointStrokeOpacity = options.strokeOpacity || 0.8;\n _dataPointRadius = options.radius || 2;\n }\n return _chart;\n };\n\n function colorFilter (color, dashstyle, inv) {\n return function () {\n var item = d3.select(this);\n var match = (item.attr('stroke') === color &&\n item.attr('stroke-dasharray') === ((dashstyle instanceof Array) ?\n dashstyle.join(',') : null)) || item.attr('fill') === color;\n return inv ? !match : match;\n };\n }\n\n _chart.legendHighlight = function (d) {\n if (!_chart.isLegendableHidden(d)) {\n _chart.g().selectAll('path.line, path.area')\n .classed('highlight', colorFilter(d.color, d.dashstyle))\n .classed('fadeout', colorFilter(d.color, d.dashstyle, true));\n }\n };\n\n _chart.legendReset = function () {\n _chart.g().selectAll('path.line, path.area')\n .classed('highlight', false)\n .classed('fadeout', false);\n };\n\n dc.override(_chart, 'legendables', function () {\n var legendables = _chart._legendables();\n if (!_dashStyle) {\n return legendables;\n }\n return legendables.map(function (l) {\n l.dashstyle = _dashStyle;\n return l;\n });\n });\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The data count widget is a simple widget designed to display the number of records selected by the\n * current filters out of the total number of records in the data set. Once created the data count widget\n * will automatically update the text content of the following elements under the parent element.\n *\n * '.total-count' - total number of records\n * '.filter-count' - number of records matched by the current filters\n *\n * Examples:\n * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/)\n * @name dataCount\n * @memberof dc\n * @mixes dc.baseMixin\n * @example\n * var ndx = crossfilter(data);\n * var all = ndx.groupAll();\n *\n * dc.dataCount('.dc-data-count')\n * .dimension(ndx)\n * .group(all);\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {DataCount}\n */\ndc.dataCount = function (parent, chartGroup) {\n var _formatNumber = d3.format(',d');\n var _chart = dc.baseMixin({});\n var _html = {some: '', all: ''};\n\n /**\n * Gets or sets an optional object specifying HTML templates to use depending how many items are\n * selected. The text `%total-count` will replaced with the total number of records, and the text\n * `%filter-count` will be replaced with the number of selected records.\n * - all: HTML template to use if all items are selected\n * - some: HTML template to use if not all items are selected\n * @name html\n * @memberof dc.dataCount\n * @instance\n * @example\n * counter.html({\n * some: '%filter-count out of %total-count records selected',\n * all: 'All records selected. Click on charts to apply filters'\n * })\n * @param {{some:String, all: String}} [options]\n * @returns {Chart}\n */\n _chart.html = function (options) {\n if (!arguments.length) {\n return _html;\n }\n if (options.all) {\n _html.all = options.all;\n }\n if (options.some) {\n _html.some = options.some;\n }\n return _chart;\n };\n\n /**\n * Gets or sets an optional function to format the filter count and total count.\n * @name formatNumber\n * @memberof dc.dataCount\n * @instance\n * @example\n * counter.formatNumber(d3.format('.2g'))\n * @param {Function} [formatter=d3.format('.2g')]\n * @returns {Chart}\n */\n _chart.formatNumber = function (formatter) {\n if (!arguments.length) {\n return _formatNumber;\n }\n _formatNumber = formatter;\n return _chart;\n };\n\n _chart._doRender = function () {\n var tot = _chart.dimension().size(),\n val = _chart.group().value();\n var all = _formatNumber(tot);\n var selected = _formatNumber(val);\n\n if ((tot === val) && (_html.all !== '')) {\n _chart.root().html(_html.all.replace('%total-count', all).replace('%filter-count', selected));\n } else if (_html.some !== '') {\n _chart.root().html(_html.some.replace('%total-count', all).replace('%filter-count', selected));\n } else {\n _chart.selectAll('.total-count').text(all);\n _chart.selectAll('.filter-count').text(selected);\n }\n return _chart;\n };\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The data table is a simple widget designed to list crossfilter focused data set (rows being\n * filtered) in a good old tabular fashion.\n *\n * Note: Unlike other charts, the data table (and data grid chart) use the group attribute as a keying function\n * for [nesting](https://github.com/mbostock/d3/wiki/Arrays#-nest) the data together in groups.\n * Do not pass in a crossfilter group as this will not work.\n *\n * Examples:\n * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/)\n * @name dataTable\n * @memberof dc\n * @mixes dc.baseMixin\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {DataTable}\n */\ndc.dataTable = function (parent, chartGroup) {\n var LABEL_CSS_CLASS = 'dc-table-label';\n var ROW_CSS_CLASS = 'dc-table-row';\n var COLUMN_CSS_CLASS = 'dc-table-column';\n var GROUP_CSS_CLASS = 'dc-table-group';\n var HEAD_CSS_CLASS = 'dc-table-head';\n\n var _chart = dc.baseMixin({});\n\n var _size = 25;\n var _columns = [];\n var _sortBy = function (d) {\n return d;\n };\n var _order = d3.ascending;\n var _showGroups = true;\n\n _chart._doRender = function () {\n _chart.selectAll('tbody').remove();\n\n renderRows(renderGroups());\n\n return _chart;\n };\n\n _chart._doColumnValueFormat = function (v, d) {\n return ((typeof v === 'function') ?\n v(d) : // v as function\n ((typeof v === 'string') ?\n d[v] : // v is field name string\n v.format(d) // v is Object, use fn (element 2)\n )\n );\n };\n\n _chart._doColumnHeaderFormat = function (d) {\n // if 'function', convert to string representation\n // show a string capitalized\n // if an object then display it's label string as-is.\n return (typeof d === 'function') ?\n _chart._doColumnHeaderFnToString(d) :\n ((typeof d === 'string') ?\n _chart._doColumnHeaderCapitalize(d) : String(d.label));\n };\n\n _chart._doColumnHeaderCapitalize = function (s) {\n // capitalize\n return s.charAt(0).toUpperCase() + s.slice(1);\n };\n\n _chart._doColumnHeaderFnToString = function (f) {\n // columnString(f) {\n var s = String(f);\n var i1 = s.indexOf('return ');\n if (i1 >= 0) {\n var i2 = s.lastIndexOf(';');\n if (i2 >= 0) {\n s = s.substring(i1 + 7, i2);\n var i3 = s.indexOf('numberFormat');\n if (i3 >= 0) {\n s = s.replace('numberFormat', '');\n }\n }\n }\n return s;\n };\n\n function renderGroups () {\n // The 'original' example uses all 'functions'.\n // If all 'functions' are used, then don't remove/add a header, and leave\n // the html alone. This preserves the functionality of earlier releases.\n // A 2nd option is a string representing a field in the data.\n // A third option is to supply an Object such as an array of 'information', and\n // supply your own _doColumnHeaderFormat and _doColumnValueFormat functions to\n // create what you need.\n var bAllFunctions = true;\n _columns.forEach(function (f) {\n bAllFunctions = bAllFunctions & (typeof f === 'function');\n });\n\n if (!bAllFunctions) {\n _chart.selectAll('th').remove();\n var headcols = _chart.root().selectAll('th')\n .data(_columns);\n\n var headGroup = headcols\n .enter()\n .append('th');\n\n headGroup\n .attr('class', HEAD_CSS_CLASS)\n .html(function (d) {\n return (_chart._doColumnHeaderFormat(d));\n\n });\n }\n\n var groups = _chart.root().selectAll('tbody')\n .data(nestEntries(), function (d) {\n return _chart.keyAccessor()(d);\n });\n\n var rowGroup = groups\n .enter()\n .append('tbody');\n\n if (_showGroups === true) {\n rowGroup\n .append('tr')\n .attr('class', GROUP_CSS_CLASS)\n .append('td')\n .attr('class', LABEL_CSS_CLASS)\n .attr('colspan', _columns.length)\n .html(function (d) {\n return _chart.keyAccessor()(d);\n });\n }\n\n groups.exit().remove();\n\n return rowGroup;\n }\n\n function nestEntries () {\n var entries;\n if (_order === d3.ascending) {\n entries = _chart.dimension().bottom(_size);\n } else {\n entries = _chart.dimension().top(_size);\n }\n\n return d3.nest()\n .key(_chart.group())\n .sortKeys(_order)\n .entries(entries.sort(function (a, b) {\n return _order(_sortBy(a), _sortBy(b));\n }));\n }\n\n function renderRows (groups) {\n var rows = groups.order()\n .selectAll('tr.' + ROW_CSS_CLASS)\n .data(function (d) {\n return d.values;\n });\n\n var rowEnter = rows.enter()\n .append('tr')\n .attr('class', ROW_CSS_CLASS);\n\n _columns.forEach(function (v, i) {\n rowEnter.append('td')\n .attr('class', COLUMN_CSS_CLASS + ' _' + i)\n .html(function (d) {\n return _chart._doColumnValueFormat(v, d);\n });\n });\n\n rows.exit().remove();\n\n return rows;\n }\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n /**\n * Get or set the table size which determines the number of rows displayed by the widget.\n * @name size\n * @memberof dc.dataTable\n * @instance\n * @param {Number} [size=25]\n * @returns {Chart}\n */\n _chart.size = function (size) {\n if (!arguments.length) {\n return _size;\n }\n _size = size;\n return _chart;\n };\n\n /**\n * Get or set column functions. The data table widget now supports several methods of specifying\n * the columns to display. The original method, first shown below, uses an array of functions to\n * generate dynamic columns. Column functions are simple javascript functions with only one input\n * argument `d` which represents a row in the data set. The return value of these functions will be\n * used directly to generate table content for each cell. However, this method requires the .html\n * table entry to have a fixed set of column headers.\n *\n * The second example shows you can simply list the data (d) content directly without\n * specifying it as a function, except where necessary (ie, computed columns). Note\n * the data element accessor name is capitalized when displayed in the table. You can\n * also mix in functions as desired or necessary, but you must use the\n * Object = [Label, Fn] method as shown below.\n * You may wish to override the following two functions, which are internally used to\n * translate the column information or function into a displayed header. The first one\n * is used on the simple \"string\" column specifier, the second is used to transform the\n * String(fn) into something displayable. For the Stock example, the function for Change\n * becomes a header of 'd.close - d.open'.\n * _chart._doColumnHeaderCapitalize _chart._doColumnHeaderFnToString\n * You may use your own Object definition, however you must then override\n * _chart._doColumnHeaderFormat , _chart._doColumnValueFormat\n * Be aware that fields without numberFormat specification will be displayed just as\n * they are stored in the data, unformatted.\n *\n * The third example, where all fields are specified using the Object = [Label, Fn] method.\n * @name columns\n * @memberof dc.dataTable\n * @instance\n * @example\n * chart.columns([\n * function(d) { return d.date; },\n * function(d) { return d.open; },\n * function(d) { return d.close; },\n * function(d) { return numberFormat(d.close - d.open); },\n * function(d) { return d.volume; }\n * ]);\n * @example\n * chart.columns([\n * \"date\", // d[\"date\"], ie, a field accessor; capitalized automatically\n * \"open\", // ...\n * \"close\", // ...\n * [\"Change\", // Specify an Object = [Label, Fn]\n * function (d) { return numberFormat(d.close - d.open); }],\n * \"volume\" // d[\"volume\"], ie, a field accessor; capitalized automatically\n * ]);\n * @example\n * chart.columns([\n * [\"Date\", // Specify an Object = [Label, Fn]\n * function (d) { return d.date; }],\n * [\"Open\",\n * function (d) { return numberFormat(d.open); }],\n * [\"Close\",\n * function (d) { return numberFormat(d.close); }],\n * [\"Change\",\n * function (d) { return numberFormat(d.close - d.open); }],\n * [\"Volume\",\n * function (d) { return d.volume; }]\n * ]);\n * @param {Array} [columns=[]]\n * @returns {Chart}\n */\n _chart.columns = function (columns) {\n if (!arguments.length) {\n return _columns;\n }\n _columns = columns;\n return _chart;\n };\n\n /**\n * Get or set sort-by function. This function works as a value accessor at row level and returns a\n * particular field to be sorted by. Default value: identity function\n * @name sortBy\n * @memberof dc.dataTable\n * @instance\n * @example\n * chart.sortBy(function(d) {\n * return d.date;\n * });\n * @param {Function} [sortBy]\n * @returns {Chart}\n */\n _chart.sortBy = function (sortBy) {\n if (!arguments.length) {\n return _sortBy;\n }\n _sortBy = sortBy;\n return _chart;\n };\n\n /**\n * Get or set sort order.\n * @name order\n * @memberof dc.dataTable\n * @instance\n * @example\n * chart.order(d3.descending);\n * @param {Function} [order=d3.ascending]\n * @returns {Chart}\n */\n _chart.order = function (order) {\n if (!arguments.length) {\n return _order;\n }\n _order = order;\n return _chart;\n };\n\n /**\n * Get or set if group rows will be shown.\n *\n * The .group() getter-setter must be provided in either case.\n * @name showGroups\n * @memberof dc.dataTable\n * @instance\n * @example\n * chart\n * .group([value], [name])\n * .showGroups(true|false);\n * @param {Boolean} [showGroups=true]\n * @returns {Chart}\n */\n _chart.showGroups = function (showGroups) {\n if (!arguments.length) {\n return _showGroups;\n }\n _showGroups = showGroups;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Data grid is a simple widget designed to list the filtered records, providing\n * a simple way to define how the items are displayed.\n *\n * Note: Unlike other charts, the data grid chart (and data table) use the group attribute as a keying function\n * for [nesting](https://github.com/mbostock/d3/wiki/Arrays#-nest) the data together in groups.\n * Do not pass in a crossfilter group as this will not work.\n *\n * Examples:\n * - [List of members of the european parliament](http://europarl.me/dc.js/web/ep/index.html)\n * @name dataGrid\n * @memberof dc\n * @mixes dc.baseMixin\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {DataGrid}\n */\ndc.dataGrid = function (parent, chartGroup) {\n var LABEL_CSS_CLASS = 'dc-grid-label';\n var ITEM_CSS_CLASS = 'dc-grid-item';\n var GROUP_CSS_CLASS = 'dc-grid-group';\n var GRID_CSS_CLASS = 'dc-grid-top';\n\n var _chart = dc.baseMixin({});\n\n var _size = 999; // shouldn't be needed, but you might\n var _html = function (d) { return 'you need to provide an html() handling param: ' + JSON.stringify(d); };\n var _sortBy = function (d) {\n return d;\n };\n var _order = d3.ascending;\n var _beginSlice = 0, _endSlice;\n\n var _htmlGroup = function (d) {\n return '

' +\n _chart.keyAccessor()(d) + '

';\n };\n\n _chart._doRender = function () {\n _chart.selectAll('div.' + GRID_CSS_CLASS).remove();\n\n renderItems(renderGroups());\n\n return _chart;\n };\n\n function renderGroups () {\n var groups = _chart.root().selectAll('div.' + GRID_CSS_CLASS)\n .data(nestEntries(), function (d) {\n return _chart.keyAccessor()(d);\n });\n\n var itemGroup = groups\n .enter()\n .append('div')\n .attr('class', GRID_CSS_CLASS);\n\n if (_htmlGroup) {\n itemGroup\n .html(function (d) {\n return _htmlGroup(d);\n });\n }\n\n groups.exit().remove();\n return itemGroup;\n }\n\n function nestEntries () {\n var entries = _chart.dimension().top(_size);\n\n return d3.nest()\n .key(_chart.group())\n .sortKeys(_order)\n .entries(entries.sort(function (a, b) {\n return _order(_sortBy(a), _sortBy(b));\n }).slice(_beginSlice, _endSlice));\n }\n\n function renderItems (groups) {\n var items = groups.order()\n .selectAll('div.' + ITEM_CSS_CLASS)\n .data(function (d) {\n return d.values;\n });\n\n items.enter()\n .append('div')\n .attr('class', ITEM_CSS_CLASS)\n .html(function (d) {\n return _html(d);\n });\n\n items.exit().remove();\n\n return items;\n }\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n /**\n * Get or set the index of the beginning slice which determines which entries get displayed by the widget.\n * Useful when implementing pagination.\n * @name beginSlice\n * @memberof dc.dataGrid\n * @instance\n * @param {Number} [beginSlice=0]\n * @returns {Chart}\n */\n _chart.beginSlice = function (beginSlice) {\n if (!arguments.length) {\n return _beginSlice;\n }\n _beginSlice = beginSlice;\n return _chart;\n };\n\n /**\n * Get or set the index of the end slice which determines which entries get displayed by the widget\n * Useful when implementing pagination.\n * @name endSlice\n * @memberof dc.dataGrid\n * @instance\n * @param {Number} [endSlice]\n * @returns {Chart}\n */\n _chart.endSlice = function (endSlice) {\n if (!arguments.length) {\n return _endSlice;\n }\n _endSlice = endSlice;\n return _chart;\n };\n\n /**\n * Get or set the grid size which determines the number of items displayed by the widget.\n * @name size\n * @memberof dc.dataGrid\n * @instance\n * @param {Number} [size=999]\n * @returns {Chart}\n */\n _chart.size = function (size) {\n if (!arguments.length) {\n return _size;\n }\n _size = size;\n return _chart;\n };\n\n /**\n * Get or set the function that formats an item. The data grid widget uses a\n * function to generate dynamic html. Use your favourite templating engine or\n * generate the string directly.\n * @name html\n * @memberof dc.dataGrid\n * @instance\n * @example\n * chart.html(function (d) { return '
'+data.exampleString+'
';});\n * @param {Function} [html]\n * @returns {Chart}\n */\n _chart.html = function (html) {\n if (!arguments.length) {\n return _html;\n }\n _html = html;\n return _chart;\n };\n\n /**\n * Get or set the function that formats a group label.\n * @name htmlGroup\n * @memberof dc.dataGrid\n * @instance\n * @example\n * chart.htmlGroup (function (d) { return '

'.d.key . 'with ' . d.values.length .' items

'});\n * @param {Function} [htmlGroup]\n * @returns {Chart}\n */\n _chart.htmlGroup = function (htmlGroup) {\n if (!arguments.length) {\n return _htmlGroup;\n }\n _htmlGroup = htmlGroup;\n return _chart;\n };\n\n /**\n * Get or set sort-by function. This function works as a value accessor at the item\n * level and returns a particular field to be sorted.\n * @name sortBy\n * @memberof dc.dataGrid\n * @instance\n * @example\n * chart.sortBy(function(d) {\n * return d.date;\n * });\n * @param {Function} [sortByFunction]\n * @returns {Chart}\n */\n _chart.sortBy = function (sortByFunction) {\n if (!arguments.length) {\n return _sortBy;\n }\n _sortBy = sortByFunction;\n return _chart;\n };\n\n /**\n * Get or set sort order function.\n * @name order\n * @memberof dc.dataGrid\n * @instance\n * @example\n * chart.order(d3.descending);\n * @param {Function} [order=d3.ascending]\n * @returns {Chart}\n */\n _chart.order = function (order) {\n if (!arguments.length) {\n return _order;\n }\n _order = order;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A concrete implementation of a general purpose bubble chart that allows data visualization using the\n * following dimensions:\n * - x axis position\n * - y axis position\n * - bubble radius\n * - color\n * Examples:\n * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/)\n * - [US Venture Capital Landscape 2011](http://dc-js.github.com/dc.js/vc/index.html)\n * @name bubbleChart\n * @memberof dc\n * @mixes dc.bubbleMixin\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a bubble chart under #chart-container1 element using the default global chart group\n * var bubbleChart1 = dc.bubbleChart('#chart-container1');\n * // create a bubble chart under #chart-container2 element using chart group A\n * var bubbleChart2 = dc.bubbleChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {BubbleChart}\n */\ndc.bubbleChart = function (parent, chartGroup) {\n var _chart = dc.bubbleMixin(dc.coordinateGridMixin({}));\n\n var _elasticRadius = false;\n\n _chart.transitionDuration(750);\n\n var bubbleLocator = function (d) {\n return 'translate(' + (bubbleX(d)) + ',' + (bubbleY(d)) + ')';\n };\n\n /**\n * Turn on or off the elastic bubble radius feature, or return the value of the flag. If this\n * feature is turned on, then bubble radii will be automatically rescaled to fit the chart better.\n * @name elasticRadius\n * @memberof dc.bubbleChart\n * @instance\n * @param {Boolean} [elasticRadius=false]\n * @returns {Boolean}\n */\n _chart.elasticRadius = function (elasticRadius) {\n if (!arguments.length) {\n return _elasticRadius;\n }\n _elasticRadius = elasticRadius;\n return _chart;\n };\n\n _chart.plotData = function () {\n if (_elasticRadius) {\n _chart.r().domain([_chart.rMin(), _chart.rMax()]);\n }\n\n _chart.r().range([_chart.MIN_RADIUS, _chart.xAxisLength() * _chart.maxBubbleRelativeSize()]);\n\n var bubbleG = _chart.chartBodyG().selectAll('g.' + _chart.BUBBLE_NODE_CLASS)\n .data(_chart.data(), function (d) { return d.key; });\n\n renderNodes(bubbleG);\n\n updateNodes(bubbleG);\n\n removeNodes(bubbleG);\n\n _chart.fadeDeselectedArea();\n };\n\n function renderNodes (bubbleG) {\n var bubbleGEnter = bubbleG.enter().append('g');\n\n bubbleGEnter\n .attr('class', _chart.BUBBLE_NODE_CLASS)\n .attr('transform', bubbleLocator)\n .append('circle').attr('class', function (d, i) {\n return _chart.BUBBLE_CLASS + ' _' + i;\n })\n .on('click', _chart.onClick)\n .attr('fill', _chart.getColor)\n .attr('r', 0);\n dc.transition(bubbleG, _chart.transitionDuration())\n .selectAll('circle.' + _chart.BUBBLE_CLASS)\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n })\n .attr('opacity', function (d) {\n return (_chart.bubbleR(d) > 0) ? 1 : 0;\n });\n\n _chart._doRenderLabel(bubbleGEnter);\n\n _chart._doRenderTitles(bubbleGEnter);\n }\n\n function updateNodes (bubbleG) {\n dc.transition(bubbleG, _chart.transitionDuration())\n .attr('transform', bubbleLocator)\n .selectAll('circle.' + _chart.BUBBLE_CLASS)\n .attr('fill', _chart.getColor)\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n })\n .attr('opacity', function (d) {\n return (_chart.bubbleR(d) > 0) ? 1 : 0;\n });\n\n _chart.doUpdateLabels(bubbleG);\n _chart.doUpdateTitles(bubbleG);\n }\n\n function removeNodes (bubbleG) {\n bubbleG.exit().remove();\n }\n\n function bubbleX (d) {\n var x = _chart.x()(_chart.keyAccessor()(d));\n if (isNaN(x)) {\n x = 0;\n }\n return x;\n }\n\n function bubbleY (d) {\n var y = _chart.y()(_chart.valueAccessor()(d));\n if (isNaN(y)) {\n y = 0;\n }\n return y;\n }\n\n _chart.renderBrush = function () {\n // override default x axis brush from parent chart\n };\n\n _chart.redrawBrush = function () {\n // override default x axis brush from parent chart\n _chart.fadeDeselectedArea();\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Composite charts are a special kind of chart that render multiple charts on the same Coordinate\n * Grid. You can overlay (compose) different bar/line/area charts in a single composite chart to\n * achieve some quite flexible charting effects.\n * @name compositeChart\n * @memberof dc\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a composite chart under #chart-container1 element using the default global chart group\n * var compositeChart1 = dc.compositeChart('#chart-container1');\n * // create a composite chart under #chart-container2 element using chart group A\n * var compositeChart2 = dc.compositeChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {CompositeChart}\n */\ndc.compositeChart = function (parent, chartGroup) {\n\n var SUB_CHART_CLASS = 'sub';\n var DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING = 12;\n\n var _chart = dc.coordinateGridMixin({});\n var _children = [];\n\n var _childOptions = {};\n\n var _shareColors = false,\n _shareTitle = true;\n\n var _rightYAxis = d3.svg.axis(),\n _rightYAxisLabel = 0,\n _rightYAxisLabelPadding = DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING,\n _rightY,\n _rightAxisGridLines = false;\n\n _chart._mandatoryAttributes([]);\n _chart.transitionDuration(500);\n\n dc.override(_chart, '_generateG', function () {\n var g = this.__generateG();\n\n for (var i = 0; i < _children.length; ++i) {\n var child = _children[i];\n\n generateChildG(child, i);\n\n if (!child.dimension()) {\n child.dimension(_chart.dimension());\n }\n if (!child.group()) {\n child.group(_chart.group());\n }\n\n child.chartGroup(_chart.chartGroup());\n child.svg(_chart.svg());\n child.xUnits(_chart.xUnits());\n child.transitionDuration(_chart.transitionDuration());\n child.brushOn(_chart.brushOn());\n child.renderTitle(_chart.renderTitle());\n child.elasticX(_chart.elasticX());\n }\n\n return g;\n });\n\n _chart._brushing = function () {\n var extent = _chart.extendBrush();\n var brushIsEmpty = _chart.brushIsEmpty(extent);\n\n for (var i = 0; i < _children.length; ++i) {\n _children[i].filter(null);\n if (!brushIsEmpty) {\n _children[i].filter(extent);\n }\n }\n };\n\n _chart._prepareYAxis = function () {\n if (leftYAxisChildren().length !== 0) { prepareLeftYAxis(); }\n if (rightYAxisChildren().length !== 0) { prepareRightYAxis(); }\n\n if (leftYAxisChildren().length > 0 && !_rightAxisGridLines) {\n _chart._renderHorizontalGridLinesForAxis(_chart.g(), _chart.y(), _chart.yAxis());\n } else if (rightYAxisChildren().length > 0) {\n _chart._renderHorizontalGridLinesForAxis(_chart.g(), _rightY, _rightYAxis);\n }\n };\n\n _chart.renderYAxis = function () {\n if (leftYAxisChildren().length !== 0) {\n _chart.renderYAxisAt('y', _chart.yAxis(), _chart.margins().left);\n _chart.renderYAxisLabel('y', _chart.yAxisLabel(), -90);\n }\n\n if (rightYAxisChildren().length !== 0) {\n _chart.renderYAxisAt('yr', _chart.rightYAxis(), _chart.width() - _chart.margins().right);\n _chart.renderYAxisLabel('yr', _chart.rightYAxisLabel(), 90, _chart.width() - _rightYAxisLabelPadding);\n }\n };\n\n function prepareRightYAxis () {\n if (_chart.rightY() === undefined || _chart.elasticY()) {\n if (_chart.rightY() === undefined) {\n _chart.rightY(d3.scale.linear());\n }\n _chart.rightY().domain([rightYAxisMin(), rightYAxisMax()]).rangeRound([_chart.yAxisHeight(), 0]);\n }\n\n _chart.rightY().range([_chart.yAxisHeight(), 0]);\n _chart.rightYAxis(_chart.rightYAxis().scale(_chart.rightY()));\n\n _chart.rightYAxis().orient('right');\n }\n\n function prepareLeftYAxis () {\n if (_chart.y() === undefined || _chart.elasticY()) {\n if (_chart.y() === undefined) {\n _chart.y(d3.scale.linear());\n }\n _chart.y().domain([yAxisMin(), yAxisMax()]).rangeRound([_chart.yAxisHeight(), 0]);\n }\n\n _chart.y().range([_chart.yAxisHeight(), 0]);\n _chart.yAxis(_chart.yAxis().scale(_chart.y()));\n\n _chart.yAxis().orient('left');\n }\n\n function generateChildG (child, i) {\n child._generateG(_chart.g());\n child.g().attr('class', SUB_CHART_CLASS + ' _' + i);\n }\n\n _chart.plotData = function () {\n for (var i = 0; i < _children.length; ++i) {\n var child = _children[i];\n\n if (!child.g()) {\n generateChildG(child, i);\n }\n\n if (_shareColors) {\n child.colors(_chart.colors());\n }\n\n child.x(_chart.x());\n\n child.xAxis(_chart.xAxis());\n\n if (child.useRightYAxis()) {\n child.y(_chart.rightY());\n child.yAxis(_chart.rightYAxis());\n } else {\n child.y(_chart.y());\n child.yAxis(_chart.yAxis());\n }\n\n child.plotData();\n\n child._activateRenderlets();\n }\n };\n\n /**\n * Get or set whether to draw gridlines from the right y axis. Drawing from the left y axis is the\n * default behavior. This option is only respected when subcharts with both left and right y-axes\n * are present.\n * @name useRightAxisGridLines\n * @memberof dc.compositeChart\n * @instance\n * @param {Boolean} [useRightAxisGridLines=false]\n * @return {Chart}\n */\n _chart.useRightAxisGridLines = function (useRightAxisGridLines) {\n if (!arguments) {\n return _rightAxisGridLines;\n }\n\n _rightAxisGridLines = useRightAxisGridLines;\n return _chart;\n };\n\n /**\n * Get or set chart-specific options for all child charts. This is equivalent to calling `.options`\n * on each child chart.\n * @name childOptions\n * @memberof dc.compositeChart\n * @instance\n * @param {Object} [childOptions]\n * @return {Chart}\n */\n _chart.childOptions = function (childOptions) {\n if (!arguments.length) {\n return _childOptions;\n }\n _childOptions = childOptions;\n _children.forEach(function (child) {\n child.options(_childOptions);\n });\n return _chart;\n };\n\n _chart.fadeDeselectedArea = function () {\n for (var i = 0; i < _children.length; ++i) {\n var child = _children[i];\n child.brush(_chart.brush());\n child.fadeDeselectedArea();\n }\n };\n\n /**\n * Set or get the right y axis label.\n * @name rightYAxisLabel\n * @memberof dc.compositeChart\n * @instance\n * @param {String} [rightYAxisLabel]\n * @param {Number} [padding]\n * @return {Chart}\n */\n _chart.rightYAxisLabel = function (rightYAxisLabel, padding) {\n if (!arguments.length) {\n return _rightYAxisLabel;\n }\n _rightYAxisLabel = rightYAxisLabel;\n _chart.margins().right -= _rightYAxisLabelPadding;\n _rightYAxisLabelPadding = (padding === undefined) ? DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING : padding;\n _chart.margins().right += _rightYAxisLabelPadding;\n return _chart;\n };\n\n /**\n * Combine the given charts into one single composite coordinate grid chart.\n * @name compose\n * @memberof dc.compositeChart\n * @instance\n * @example\n * moveChart.compose([\n * // when creating sub-chart you need to pass in the parent chart\n * dc.lineChart(moveChart)\n * .group(indexAvgByMonthGroup) // if group is missing then parent's group will be used\n * .valueAccessor(function (d){return d.value.avg;})\n * // most of the normal functions will continue to work in a composed chart\n * .renderArea(true)\n * .stack(monthlyMoveGroup, function (d){return d.value;})\n * .title(function (d){\n * var value = d.value.avg?d.value.avg:d.value;\n * if(isNaN(value)) value = 0;\n * return dateFormat(d.key) + '\\n' + numberFormat(value);\n * }),\n * dc.barChart(moveChart)\n * .group(volumeByMonthGroup)\n * .centerBar(true)\n * ]);\n * @param {Array} [subChartArray]\n * @return {Chart}\n */\n _chart.compose = function (subChartArray) {\n _children = subChartArray;\n _children.forEach(function (child) {\n child.height(_chart.height());\n child.width(_chart.width());\n child.margins(_chart.margins());\n\n if (_shareTitle) {\n child.title(_chart.title());\n }\n\n child.options(_childOptions);\n });\n return _chart;\n };\n\n /**\n * Returns the child charts which are composed into the composite chart.\n * @name children\n * @memberof dc.compositeChart\n * @instance\n * @return {Array}\n */\n _chart.children = function () {\n return _children;\n };\n\n /**\n * Get or set color sharing for the chart. If set, the `.colors()` value from this chart\n * will be shared with composed children. Additionally if the child chart implements\n * Stackable and has not set a custom .colorAccessor, then it will generate a color\n * specific to its order in the composition.\n * @name shareColors\n * @memberof dc.compositeChart\n * @instance\n * @param {Boolean} [shareColors=false]\n * @return {Chart}\n */\n _chart.shareColors = function (shareColors) {\n if (!arguments.length) {\n return _shareColors;\n }\n _shareColors = shareColors;\n return _chart;\n };\n\n /**\n * Get or set title sharing for the chart. If set, the `.title()` value from this chart will be\n * shared with composed children.\n * @name shareTitle\n * @memberof dc.compositeChart\n * @instance\n * @param {Boolean} [shareTitle=true]\n * @return {Chart}\n */\n _chart.shareTitle = function (shareTitle) {\n if (!arguments.length) {\n return _shareTitle;\n }\n _shareTitle = shareTitle;\n return _chart;\n };\n\n /**\n * Get or set the y scale for the right axis. The right y scale is typically automatically\n * generated by the chart implementation.\n * @name rightY\n * @memberof dc.compositeChart\n * @instance\n * @param {d3.scale} [yScale]\n * @return {Chart}\n */\n _chart.rightY = function (yScale) {\n if (!arguments.length) {\n return _rightY;\n }\n _rightY = yScale;\n _chart.rescale();\n return _chart;\n };\n\n function leftYAxisChildren () {\n return _children.filter(function (child) {\n return !child.useRightYAxis();\n });\n }\n\n function rightYAxisChildren () {\n return _children.filter(function (child) {\n return child.useRightYAxis();\n });\n }\n\n function getYAxisMin (charts) {\n return charts.map(function (c) {\n return c.yAxisMin();\n });\n }\n\n delete _chart.yAxisMin;\n function yAxisMin () {\n return d3.min(getYAxisMin(leftYAxisChildren()));\n }\n\n function rightYAxisMin () {\n return d3.min(getYAxisMin(rightYAxisChildren()));\n }\n\n function getYAxisMax (charts) {\n return charts.map(function (c) {\n return c.yAxisMax();\n });\n }\n\n delete _chart.yAxisMax;\n function yAxisMax () {\n return dc.utils.add(d3.max(getYAxisMax(leftYAxisChildren())), _chart.yAxisPadding());\n }\n\n function rightYAxisMax () {\n return dc.utils.add(d3.max(getYAxisMax(rightYAxisChildren())), _chart.yAxisPadding());\n }\n\n function getAllXAxisMinFromChildCharts () {\n return _children.map(function (c) {\n return c.xAxisMin();\n });\n }\n\n dc.override(_chart, 'xAxisMin', function () {\n return dc.utils.subtract(d3.min(getAllXAxisMinFromChildCharts()), _chart.xAxisPadding());\n });\n\n function getAllXAxisMaxFromChildCharts () {\n return _children.map(function (c) {\n return c.xAxisMax();\n });\n }\n\n dc.override(_chart, 'xAxisMax', function () {\n return dc.utils.add(d3.max(getAllXAxisMaxFromChildCharts()), _chart.xAxisPadding());\n });\n\n _chart.legendables = function () {\n return _children.reduce(function (items, child) {\n if (_shareColors) {\n child.colors(_chart.colors());\n }\n items.push.apply(items, child.legendables());\n return items;\n }, []);\n };\n\n _chart.legendHighlight = function (d) {\n for (var j = 0; j < _children.length; ++j) {\n var child = _children[j];\n child.legendHighlight(d);\n }\n };\n\n _chart.legendReset = function (d) {\n for (var j = 0; j < _children.length; ++j) {\n var child = _children[j];\n child.legendReset(d);\n }\n };\n\n _chart.legendToggle = function () {\n console.log('composite should not be getting legendToggle itself');\n };\n\n /**\n * Set or get the right y axis used by the composite chart. This function is most useful when y\n * axis customization is required. The y axis in dc.js is an instance of a [d3 axis\n * object](https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-_axis) therefore it supports any valid\n * d3 axis manipulation. **Caution**: The y axis is usually generated internally by dc;\n * resetting it may cause unexpected results.\n * @name rightYAxis\n * @memberof dc.compositeChart\n * @instance\n * @example\n * // customize y axis tick format\n * chart.rightYAxis().tickFormat(function (v) {return v + '%';});\n * // customize y axis tick values\n * chart.rightYAxis().tickValues([0, 100, 200, 300]);\n * @param {d3.svg.axis} [rightYAxis]\n * @return {Chart}\n */\n _chart.rightYAxis = function (rightYAxis) {\n if (!arguments.length) {\n return _rightYAxis;\n }\n _rightYAxis = rightYAxis;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A series chart is a chart that shows multiple series of data overlaid on one chart, where the\n * series is specified in the data. It is a specialization of Composite Chart and inherits all\n * composite features other than recomposing the chart.\n * @name seriesChart\n * @memberof dc\n * @mixes dc.compositeChart\n * @example\n * // create a series chart under #chart-container1 element using the default global chart group\n * var seriesChart1 = dc.seriesChart(\"#chart-container1\");\n * // create a series chart under #chart-container2 element using chart group A\n * var seriesChart2 = dc.seriesChart(\"#chart-container2\", \"chartGroupA\");\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {SeriesChart}\n */\ndc.seriesChart = function (parent, chartGroup) {\n var _chart = dc.compositeChart(parent, chartGroup);\n\n function keySort (a, b) {\n return d3.ascending(_chart.keyAccessor()(a), _chart.keyAccessor()(b));\n }\n\n var _charts = {};\n var _chartFunction = dc.lineChart;\n var _seriesAccessor;\n var _seriesSort = d3.ascending;\n var _valueSort = keySort;\n\n _chart._mandatoryAttributes().push('seriesAccessor', 'chart');\n _chart.shareColors(true);\n\n _chart._preprocessData = function () {\n var keep = [];\n var childrenChanged;\n var nester = d3.nest().key(_seriesAccessor);\n if (_seriesSort) {\n nester.sortKeys(_seriesSort);\n }\n if (_valueSort) {\n nester.sortValues(_valueSort);\n }\n var nesting = nester.entries(_chart.data());\n var children =\n nesting.map(function (sub, i) {\n var subChart = _charts[sub.key] || _chartFunction.call(_chart, _chart, chartGroup, sub.key, i);\n if (!_charts[sub.key]) {\n childrenChanged = true;\n }\n _charts[sub.key] = subChart;\n keep.push(sub.key);\n return subChart\n .dimension(_chart.dimension())\n .group({all: d3.functor(sub.values)}, sub.key)\n .keyAccessor(_chart.keyAccessor())\n .valueAccessor(_chart.valueAccessor())\n .brushOn(_chart.brushOn());\n });\n // this works around the fact compositeChart doesn't really\n // have a removal interface\n Object.keys(_charts)\n .filter(function (c) {return keep.indexOf(c) === -1;})\n .forEach(function (c) {\n clearChart(c);\n childrenChanged = true;\n });\n _chart._compose(children);\n if (childrenChanged && _chart.legend()) {\n _chart.legend().render();\n }\n };\n\n function clearChart (c) {\n if (_charts[c].g()) {\n _charts[c].g().remove();\n }\n delete _charts[c];\n }\n\n function resetChildren () {\n Object.keys(_charts).map(clearChart);\n _charts = {};\n }\n\n /**\n * Get or set the chart function, which generates the child charts.\n * @name chart\n * @memberof dc.seriesChart\n * @instance\n * @example\n * // put interpolation on the line charts used for the series\n * chart.chart(function(c) { return dc.lineChart(c).interpolate('basis'); })\n * // do a scatter series chart\n * chart.chart(dc.scatterPlot)\n * @param {Function} [chartFunction=dc.lineChart]\n * @returns {Chart}\n */\n _chart.chart = function (chartFunction) {\n if (!arguments.length) {\n return _chartFunction;\n }\n _chartFunction = chartFunction;\n resetChildren();\n return _chart;\n };\n\n /**\n * Get or set accessor function for the displayed series. Given a datum, this function\n * should return the series that datum belongs to.\n * @name seriesAccessor\n * @memberof dc.seriesChart\n * @instance\n * @param {Function} [accessor]\n * @returns {Chart}\n */\n _chart.seriesAccessor = function (accessor) {\n if (!arguments.length) {\n return _seriesAccessor;\n }\n _seriesAccessor = accessor;\n resetChildren();\n return _chart;\n };\n\n /**\n * Get or set a function to sort the list of series by, given series values.\n * @name seriesSort\n * @memberof dc.seriesChart\n * @instance\n * @example\n * chart.seriesSort(d3.descending);\n * @param {Function} [sortFunction=d3.ascending]\n * @returns {Chart}\n */\n _chart.seriesSort = function (sortFunction) {\n if (!arguments.length) {\n return _seriesSort;\n }\n _seriesSort = sortFunction;\n resetChildren();\n return _chart;\n };\n\n /**\n * Get or set a function to sort each series values by. By default this is the key accessor which,\n * for example, will ensure a lineChart series connects its points in increasing key/x order,\n * rather than haphazardly.\n * @name valueSort\n * @memberof dc.seriesChart\n * @instance\n * @param {Function} [sortFunction]\n * @returns {Chart}\n */\n _chart.valueSort = function (sortFunction) {\n if (!arguments.length) {\n return _valueSort;\n }\n _valueSort = sortFunction;\n resetChildren();\n return _chart;\n };\n\n // make compose private\n _chart._compose = _chart.compose;\n delete _chart.compose;\n\n return _chart;\n};\n","/**\n * The geo choropleth chart is designed as an easy way to create a crossfilter driven choropleth map\n * from GeoJson data. This chart implementation was inspired by [the great d3 choropleth example](http://bl.ocks.org/4060606).\n * Examples:\n * - [US Venture Capital Landscape 2011](http://dc-js.github.com/dc.js/vc/index.html)\n * @name geoChoroplethChart\n * @memberof dc\n * @mixes dc.colorMixin\n * @mixes dc.baseMixin\n * @example\n * // create a choropleth chart under '#us-chart' element using the default global chart group\n * var chart1 = dc.geoChoroplethChart('#us-chart');\n * // create a choropleth chart under '#us-chart2' element using chart group A\n * var chart2 = dc.compositeChart('#us-chart2', 'chartGroupA');\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {GeoChoroplethChart}\n */\ndc.geoChoroplethChart = function (parent, chartGroup) {\n var _chart = dc.colorMixin(dc.baseMixin({}));\n\n _chart.colorAccessor(function (d) {\n return d || 0;\n });\n\n var _geoPath = d3.geo.path();\n var _projectionFlag;\n\n var _geoJsons = [];\n\n _chart._doRender = function () {\n _chart.resetSvg();\n for (var layerIndex = 0; layerIndex < _geoJsons.length; ++layerIndex) {\n var states = _chart.svg().append('g')\n .attr('class', 'layer' + layerIndex);\n\n var regionG = states.selectAll('g.' + geoJson(layerIndex).name)\n .data(geoJson(layerIndex).data)\n .enter()\n .append('g')\n .attr('class', geoJson(layerIndex).name);\n\n regionG\n .append('path')\n .attr('fill', 'white')\n .attr('d', _geoPath);\n\n regionG.append('title');\n\n plotData(layerIndex);\n }\n _projectionFlag = false;\n };\n\n function plotData (layerIndex) {\n var data = generateLayeredData();\n\n if (isDataLayer(layerIndex)) {\n var regionG = renderRegionG(layerIndex);\n\n renderPaths(regionG, layerIndex, data);\n\n renderTitle(regionG, layerIndex, data);\n }\n }\n\n function generateLayeredData () {\n var data = {};\n var groupAll = _chart.data();\n for (var i = 0; i < groupAll.length; ++i) {\n data[_chart.keyAccessor()(groupAll[i])] = _chart.valueAccessor()(groupAll[i]);\n }\n return data;\n }\n\n function isDataLayer (layerIndex) {\n return geoJson(layerIndex).keyAccessor;\n }\n\n function renderRegionG (layerIndex) {\n var regionG = _chart.svg()\n .selectAll(layerSelector(layerIndex))\n .classed('selected', function (d) {\n return isSelected(layerIndex, d);\n })\n .classed('deselected', function (d) {\n return isDeselected(layerIndex, d);\n })\n .attr('class', function (d) {\n var layerNameClass = geoJson(layerIndex).name;\n var regionClass = dc.utils.nameToId(geoJson(layerIndex).keyAccessor(d));\n var baseClasses = layerNameClass + ' ' + regionClass;\n if (isSelected(layerIndex, d)) {\n baseClasses += ' selected';\n }\n if (isDeselected(layerIndex, d)) {\n baseClasses += ' deselected';\n }\n return baseClasses;\n });\n return regionG;\n }\n\n function layerSelector (layerIndex) {\n return 'g.layer' + layerIndex + ' g.' + geoJson(layerIndex).name;\n }\n\n function isSelected (layerIndex, d) {\n return _chart.hasFilter() && _chart.hasFilter(getKey(layerIndex, d));\n }\n\n function isDeselected (layerIndex, d) {\n return _chart.hasFilter() && !_chart.hasFilter(getKey(layerIndex, d));\n }\n\n function getKey (layerIndex, d) {\n return geoJson(layerIndex).keyAccessor(d);\n }\n\n function geoJson (index) {\n return _geoJsons[index];\n }\n\n function renderPaths (regionG, layerIndex, data) {\n var paths = regionG\n .select('path')\n .attr('fill', function () {\n var currentFill = d3.select(this).attr('fill');\n if (currentFill) {\n return currentFill;\n }\n return 'none';\n })\n .on('click', function (d) {\n return _chart.onClick(d, layerIndex);\n });\n\n dc.transition(paths, _chart.transitionDuration()).attr('fill', function (d, i) {\n return _chart.getColor(data[geoJson(layerIndex).keyAccessor(d)], i);\n });\n }\n\n _chart.onClick = function (d, layerIndex) {\n var selectedRegion = geoJson(layerIndex).keyAccessor(d);\n dc.events.trigger(function () {\n _chart.filter(selectedRegion);\n _chart.redrawGroup();\n });\n };\n\n function renderTitle (regionG, layerIndex, data) {\n if (_chart.renderTitle()) {\n regionG.selectAll('title').text(function (d) {\n var key = getKey(layerIndex, d);\n var value = data[key];\n return _chart.title()({key: key, value: value});\n });\n }\n }\n\n _chart._doRedraw = function () {\n for (var layerIndex = 0; layerIndex < _geoJsons.length; ++layerIndex) {\n plotData(layerIndex);\n if (_projectionFlag) {\n _chart.svg().selectAll('g.' + geoJson(layerIndex).name + ' path').attr('d', _geoPath);\n }\n }\n _projectionFlag = false;\n };\n\n /**\n * **mandatory**\n *\n * Use this function to insert a new GeoJson map layer. This function can be invoked multiple times\n * if you have multiple GeoJson data layers to render on top of each other. If you overlay multiple\n * layers with the same name the new overlay will override the existing one.\n * @name overlayGeoJson\n * @memberof dc.geoChoroplethChart\n * @instance\n * @example\n * // insert a layer for rendering US states\n * chart.overlayGeoJson(statesJson.features, 'state', function(d) {\n * return d.properties.name;\n * });\n * @param {Object} json - a geojson feed\n * @param {String} name - name of the layer\n * @param {Function} keyAccessor - accessor function used to extract 'key' from the GeoJson data. The key extracted by\n * this function should match the keys returned by the crossfilter groups.\n * @returns {Chart}\n */\n _chart.overlayGeoJson = function (json, name, keyAccessor) {\n for (var i = 0; i < _geoJsons.length; ++i) {\n if (_geoJsons[i].name === name) {\n _geoJsons[i].data = json;\n _geoJsons[i].keyAccessor = keyAccessor;\n return _chart;\n }\n }\n _geoJsons.push({name: name, data: json, keyAccessor: keyAccessor});\n return _chart;\n };\n\n /**\n * Set custom geo projection function. See the available [d3 geo projection\n * functions](https://github.com/mbostock/d3/wiki/Geo-Projections).\n * @name projection\n * @memberof dc.geoChoroplethChart\n * @instance\n * @param {d3.projection} [projection=d3.projection.albersUsa()]\n * @returns {Chart}\n */\n _chart.projection = function (projection) {\n _geoPath.projection(projection);\n _projectionFlag = true;\n return _chart;\n };\n\n /**\n * Returns all GeoJson layers currently registered with this chart. The returned array is a\n * reference to this chart's internal data structure, so any modification to this array will also\n * modify this chart's internal registration.\n * @name geoJsons\n * @memberof dc.geoChoroplethChart\n * @instance\n * @returns {Array<{name:String, data: Object, accessor: Function}>}\n */\n _chart.geoJsons = function () {\n return _geoJsons;\n };\n\n /**\n * Returns the [d3.geo.path](https://github.com/mbostock/d3/wiki/Geo-Paths#path) object used to\n * render the projection and features. Can be useful for figuring out the bounding box of the\n * feature set and thus a way to calculate scale and translation for the projection.\n * @name geoPath\n * @memberof dc.geoChoroplethChart\n * @instance\n * @returns {d3.geo.path}\n */\n _chart.geoPath = function () {\n return _geoPath;\n };\n\n /**\n * Remove a GeoJson layer from this chart by name\n * @name removeGeoJson\n * @memberof dc.geoChoroplethChart\n * @instance\n * @param {String} name\n * @returns {Chart}\n */\n _chart.removeGeoJson = function (name) {\n var geoJsons = [];\n\n for (var i = 0; i < _geoJsons.length; ++i) {\n var layer = _geoJsons[i];\n if (layer.name !== name) {\n geoJsons.push(layer);\n }\n }\n\n _geoJsons = geoJsons;\n\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The bubble overlay chart is quite different from the typical bubble chart. With the bubble overlay\n * chart you can arbitrarily place bubbles on an existing svg or bitmap image, thus changing the\n * typical x and y positioning while retaining the capability to visualize data using bubble radius\n * and coloring.\n * Examples:\n * - [Canadian City Crime Stats](http://dc-js.github.com/dc.js/crime/index.html)\n * @name bubbleOverlay\n * @memberof dc\n * @mixes dc.bubbleMixin\n * @mixes dc.baseMixin\n * @example\n * // create a bubble overlay chart on top of the '#chart-container1 svg' element using the default global chart group\n * var bubbleChart1 = dc.bubbleOverlayChart('#chart-container1').svg(d3.select('#chart-container1 svg'));\n * // create a bubble overlay chart on top of the '#chart-container2 svg' element using chart group A\n * var bubbleChart2 = dc.compositeChart('#chart-container2', 'chartGroupA').svg(d3.select('#chart-container2 svg'));\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {BubbleOverlay}\n */\ndc.bubbleOverlay = function (parent, chartGroup) {\n var BUBBLE_OVERLAY_CLASS = 'bubble-overlay';\n var BUBBLE_NODE_CLASS = 'node';\n var BUBBLE_CLASS = 'bubble';\n\n /**\n * **mandatory**\n *\n * Set the underlying svg image element. Unlike other dc charts this chart will not generate a svg\n * element; therefore the bubble overlay chart will not work if this function is not invoked. If the\n * underlying image is a bitmap, then an empty svg will need to be created on top of the image.\n * @name svg\n * @memberof dc.bubbleOverlay\n * @instance\n * @example\n * // set up underlying svg element\n * chart.svg(d3.select('#chart svg'));\n * @param {Selection} [imageElement]\n * @returns {Chart}\n */\n var _chart = dc.bubbleMixin(dc.baseMixin({}));\n var _g;\n var _points = [];\n\n _chart.transitionDuration(750);\n\n _chart.radiusValueAccessor(function (d) {\n return d.value;\n });\n\n /**\n * **mandatory**\n *\n * Set up a data point on the overlay. The name of a data point should match a specific 'key' among\n * data groups generated using keyAccessor. If a match is found (point name <-> data group key)\n * then a bubble will be generated at the position specified by the function. x and y\n * value specified here are relative to the underlying svg.\n * @name point\n * @memberof dc.bubbleOverlay\n * @instance\n * @param {String} name\n * @param {Number} x\n * @param {Number} y\n * @returns {Chart}\n */\n _chart.point = function (name, x, y) {\n _points.push({name: name, x: x, y: y});\n return _chart;\n };\n\n _chart._doRender = function () {\n _g = initOverlayG();\n\n _chart.r().range([_chart.MIN_RADIUS, _chart.width() * _chart.maxBubbleRelativeSize()]);\n\n initializeBubbles();\n\n _chart.fadeDeselectedArea();\n\n return _chart;\n };\n\n function initOverlayG () {\n _g = _chart.select('g.' + BUBBLE_OVERLAY_CLASS);\n if (_g.empty()) {\n _g = _chart.svg().append('g').attr('class', BUBBLE_OVERLAY_CLASS);\n }\n return _g;\n }\n\n function initializeBubbles () {\n var data = mapData();\n\n _points.forEach(function (point) {\n var nodeG = getNodeG(point, data);\n\n var circle = nodeG.select('circle.' + BUBBLE_CLASS);\n\n if (circle.empty()) {\n circle = nodeG.append('circle')\n .attr('class', BUBBLE_CLASS)\n .attr('r', 0)\n .attr('fill', _chart.getColor)\n .on('click', _chart.onClick);\n }\n\n dc.transition(circle, _chart.transitionDuration())\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n });\n\n _chart._doRenderLabel(nodeG);\n\n _chart._doRenderTitles(nodeG);\n });\n }\n\n function mapData () {\n var data = {};\n _chart.data().forEach(function (datum) {\n data[_chart.keyAccessor()(datum)] = datum;\n });\n return data;\n }\n\n function getNodeG (point, data) {\n var bubbleNodeClass = BUBBLE_NODE_CLASS + ' ' + dc.utils.nameToId(point.name);\n\n var nodeG = _g.select('g.' + dc.utils.nameToId(point.name));\n\n if (nodeG.empty()) {\n nodeG = _g.append('g')\n .attr('class', bubbleNodeClass)\n .attr('transform', 'translate(' + point.x + ',' + point.y + ')');\n }\n\n nodeG.datum(data[point.name]);\n\n return nodeG;\n }\n\n _chart._doRedraw = function () {\n updateBubbles();\n\n _chart.fadeDeselectedArea();\n\n return _chart;\n };\n\n function updateBubbles () {\n var data = mapData();\n\n _points.forEach(function (point) {\n var nodeG = getNodeG(point, data);\n\n var circle = nodeG.select('circle.' + BUBBLE_CLASS);\n\n dc.transition(circle, _chart.transitionDuration())\n .attr('r', function (d) {\n return _chart.bubbleR(d);\n })\n .attr('fill', _chart.getColor);\n\n _chart.doUpdateLabels(nodeG);\n\n _chart.doUpdateTitles(nodeG);\n });\n }\n\n _chart.debug = function (flag) {\n if (flag) {\n var debugG = _chart.select('g.' + dc.constants.DEBUG_GROUP_CLASS);\n\n if (debugG.empty()) {\n debugG = _chart.svg()\n .append('g')\n .attr('class', dc.constants.DEBUG_GROUP_CLASS);\n }\n\n var debugText = debugG.append('text')\n .attr('x', 10)\n .attr('y', 20);\n\n debugG\n .append('rect')\n .attr('width', _chart.width())\n .attr('height', _chart.height())\n .on('mousemove', function () {\n var position = d3.mouse(debugG.node());\n var msg = position[0] + ', ' + position[1];\n debugText.text(msg);\n });\n } else {\n _chart.selectAll('.debug').remove();\n }\n\n return _chart;\n };\n\n _chart.anchor(parent, chartGroup);\n\n return _chart;\n};\n","/**\n * Concrete row chart implementation.\n * @name rowChart\n * @memberof dc\n * @mixes dc.capMixin\n * @mixes dc.marginMixin\n * @mixes dc.colorMixin\n * @mixes dc.baseMixin\n * @example\n * // create a row chart under #chart-container1 element using the default global chart group\n * var chart1 = dc.rowChart('#chart-container1');\n * // create a row chart under #chart-container2 element using chart group A\n * var chart2 = dc.rowChart('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {RowChart}\n */\ndc.rowChart = function (parent, chartGroup) {\n\n var _g;\n\n var _labelOffsetX = 10;\n var _labelOffsetY = 15;\n var _hasLabelOffsetY = false;\n var _dyOffset = '0.35em'; // this helps center labels https://github.com/mbostock/d3/wiki/SVG-Shapes#svg_text\n var _titleLabelOffsetX = 2;\n\n var _gap = 5;\n\n var _fixedBarHeight = false;\n var _rowCssClass = 'row';\n var _titleRowCssClass = 'titlerow';\n var _renderTitleLabel = false;\n\n var _chart = dc.capMixin(dc.marginMixin(dc.colorMixin(dc.baseMixin({}))));\n\n var _x;\n\n var _elasticX;\n\n var _xAxis = d3.svg.axis().orient('bottom');\n\n var _rowData;\n\n _chart.rowsCap = _chart.cap;\n\n function calculateAxisScale () {\n if (!_x || _elasticX) {\n var extent = d3.extent(_rowData, _chart.cappedValueAccessor);\n if (extent[0] > 0) {\n extent[0] = 0;\n }\n _x = d3.scale.linear().domain(extent)\n .range([0, _chart.effectiveWidth()]);\n }\n _xAxis.scale(_x);\n }\n\n function drawAxis () {\n var axisG = _g.select('g.axis');\n\n calculateAxisScale();\n\n if (axisG.empty()) {\n axisG = _g.append('g').attr('class', 'axis');\n }\n axisG.attr('transform', 'translate(0, ' + _chart.effectiveHeight() + ')');\n\n dc.transition(axisG, _chart.transitionDuration())\n .call(_xAxis);\n }\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _g = _chart.svg()\n .append('g')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n\n drawChart();\n\n return _chart;\n };\n\n _chart.title(function (d) {\n return _chart.cappedKeyAccessor(d) + ': ' + _chart.cappedValueAccessor(d);\n });\n\n _chart.label(_chart.cappedKeyAccessor);\n\n /**\n * Gets or sets the x scale. The x scale can be any d3\n * [quantitive scale](https://github.com/mbostock/d3/wiki/Quantitative-Scales)\n * @name x\n * @memberof dc.rowChart\n * @instance\n * @param {d3.scale} [scale]\n * @returns {Chart}\n */\n _chart.x = function (scale) {\n if (!arguments.length) {\n return _x;\n }\n _x = scale;\n return _chart;\n };\n\n function drawGridLines () {\n _g.selectAll('g.tick')\n .select('line.grid-line')\n .remove();\n\n _g.selectAll('g.tick')\n .append('line')\n .attr('class', 'grid-line')\n .attr('x1', 0)\n .attr('y1', 0)\n .attr('x2', 0)\n .attr('y2', function () {\n return -_chart.effectiveHeight();\n });\n }\n\n function drawChart () {\n _rowData = _chart.data();\n\n drawAxis();\n drawGridLines();\n\n var rows = _g.selectAll('g.' + _rowCssClass)\n .data(_rowData);\n\n createElements(rows);\n removeElements(rows);\n updateElements(rows);\n }\n\n function createElements (rows) {\n var rowEnter = rows.enter()\n .append('g')\n .attr('class', function (d, i) {\n return _rowCssClass + ' _' + i;\n });\n\n rowEnter.append('rect').attr('width', 0);\n\n createLabels(rowEnter);\n updateLabels(rows);\n }\n\n function removeElements (rows) {\n rows.exit().remove();\n }\n\n function rootValue () {\n var root = _x(0);\n return (root === -Infinity || root !== root) ? _x(1) : root;\n }\n\n function updateElements (rows) {\n var n = _rowData.length;\n\n var height;\n if (!_fixedBarHeight) {\n height = (_chart.effectiveHeight() - (n + 1) * _gap) / n;\n } else {\n height = _fixedBarHeight;\n }\n\n // vertically align label in center unless they override the value via property setter\n if (!_hasLabelOffsetY) {\n _labelOffsetY = height / 2;\n }\n\n var rect = rows.attr('transform', function (d, i) {\n return 'translate(0,' + ((i + 1) * _gap + i * height) + ')';\n }).select('rect')\n .attr('height', height)\n .attr('fill', _chart.getColor)\n .on('click', onClick)\n .classed('deselected', function (d) {\n return (_chart.hasFilter()) ? !isSelectedRow(d) : false;\n })\n .classed('selected', function (d) {\n return (_chart.hasFilter()) ? isSelectedRow(d) : false;\n });\n\n dc.transition(rect, _chart.transitionDuration())\n .attr('width', function (d) {\n return Math.abs(rootValue() - _x(_chart.valueAccessor()(d)));\n })\n .attr('transform', translateX);\n\n createTitles(rows);\n updateLabels(rows);\n }\n\n function createTitles (rows) {\n if (_chart.renderTitle()) {\n rows.selectAll('title').remove();\n rows.append('title').text(_chart.title());\n }\n }\n\n function createLabels (rowEnter) {\n if (_chart.renderLabel()) {\n rowEnter.append('text')\n .on('click', onClick);\n }\n if (_chart.renderTitleLabel()) {\n rowEnter.append('text')\n .attr('class', _titleRowCssClass)\n .on('click', onClick);\n }\n }\n\n function updateLabels (rows) {\n if (_chart.renderLabel()) {\n var lab = rows.select('text')\n .attr('x', _labelOffsetX)\n .attr('y', _labelOffsetY)\n .attr('dy', _dyOffset)\n .on('click', onClick)\n .attr('class', function (d, i) {\n return _rowCssClass + ' _' + i;\n })\n .text(function (d) {\n return _chart.label()(d);\n });\n dc.transition(lab, _chart.transitionDuration())\n .attr('transform', translateX);\n }\n if (_chart.renderTitleLabel()) {\n var titlelab = rows.select('.' + _titleRowCssClass)\n .attr('x', _chart.effectiveWidth() - _titleLabelOffsetX)\n .attr('y', _labelOffsetY)\n .attr('text-anchor', 'end')\n .on('click', onClick)\n .attr('class', function (d, i) {\n return _titleRowCssClass + ' _' + i ;\n })\n .text(function (d) {\n return _chart.title()(d);\n });\n dc.transition(titlelab, _chart.transitionDuration())\n .attr('transform', translateX);\n }\n }\n\n /**\n * Turn on/off Title label rendering (values) using SVG style of text-anchor 'end'\n * @name renderTitleLabel\n * @memberof dc.rowChart\n * @instance\n * @param {Boolean} [renderTitleLabel=false]\n * @returns {Chart}\n */\n _chart.renderTitleLabel = function (renderTitleLabel) {\n if (!arguments.length) {\n return _renderTitleLabel;\n }\n _renderTitleLabel = renderTitleLabel;\n return _chart;\n };\n\n function onClick (d) {\n _chart.onClick(d);\n }\n\n function translateX (d) {\n var x = _x(_chart.cappedValueAccessor(d)),\n x0 = rootValue(),\n s = x > x0 ? x0 : x;\n return 'translate(' + s + ',0)';\n }\n\n _chart._doRedraw = function () {\n drawChart();\n return _chart;\n };\n\n /**\n * Get the x axis for the row chart instance. Note: not settable for row charts.\n * See the [d3 axis object](https://github.com/mbostock/d3/wiki/SVG-Axes#wiki-axis) documention for more information.\n * @name xAxis\n * @memberof dc.rowChart\n * @instance\n * @example\n * // customize x axis tick format\n * chart.xAxis().tickFormat(function (v) {return v + '%';});\n * // customize x axis tick values\n * chart.xAxis().tickValues([0, 100, 200, 300]);\n * @returns {d3.svg.Axis}\n */\n _chart.xAxis = function () {\n return _xAxis;\n };\n\n /**\n * Get or set the fixed bar height. Default is [false] which will auto-scale bars.\n * For example, if you want to fix the height for a specific number of bars (useful in TopN charts)\n * you could fix height as follows (where count = total number of bars in your TopN and gap is\n * your vertical gap space).\n * @name fixedBarHeight\n * @memberof dc.rowChart\n * @instance\n * @example\n * chart.fixedBarHeight( chartheight - (count + 1) * gap / count);\n * @param {Boolean|Number} [fixedBarHeight=false]\n * @returns {Chart}\n */\n _chart.fixedBarHeight = function (fixedBarHeight) {\n if (!arguments.length) {\n return _fixedBarHeight;\n }\n _fixedBarHeight = fixedBarHeight;\n return _chart;\n };\n\n /**\n * Get or set the vertical gap space between rows on a particular row chart instance\n * @name gap\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [gap=5]\n * @returns {Chart}\n */\n _chart.gap = function (gap) {\n if (!arguments.length) {\n return _gap;\n }\n _gap = gap;\n return _chart;\n };\n\n /**\n * Get or set the elasticity on x axis. If this attribute is set to true, then the x axis will rescle to auto-fit the\n * data range when filtered.\n * @name elasticX\n * @memberof dc.rowChart\n * @instance\n * @param {Boolean} [elasticX]\n * @returns {Chart}\n */\n _chart.elasticX = function (elasticX) {\n if (!arguments.length) {\n return _elasticX;\n }\n _elasticX = elasticX;\n return _chart;\n };\n\n /**\n * Get or set the x offset (horizontal space to the top left corner of a row) for labels on a particular row chart.\n * @name labelOffsetX\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [labelOffsetX=10]\n * @returns {Chart}\n */\n _chart.labelOffsetX = function (labelOffsetX) {\n if (!arguments.length) {\n return _labelOffsetX;\n }\n _labelOffsetX = labelOffsetX;\n return _chart;\n };\n\n /**\n * Get or set the y offset (vertical space to the top left corner of a row) for labels on a particular row chart.\n * @name labelOffsetY\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [labelOffsety=15]\n * @returns {Chart}\n */\n _chart.labelOffsetY = function (labelOffsety) {\n if (!arguments.length) {\n return _labelOffsetY;\n }\n _labelOffsetY = labelOffsety;\n _hasLabelOffsetY = true;\n return _chart;\n };\n\n /**\n * Get of set the x offset (horizontal space between right edge of row and right edge or text.\n * @name titleLabelOffsetX\n * @memberof dc.rowChart\n * @instance\n * @param {Number} [titleLabelOffsetX=2]\n * @returns {Chart}\n */\n _chart.titleLabelOffsetX = function (titleLabelOffsetX) {\n if (!arguments.length) {\n return _titleLabelOffsetX;\n }\n _titleLabelOffsetX = titleLabelOffsetX;\n return _chart;\n };\n\n function isSelectedRow (d) {\n return _chart.hasFilter(_chart.cappedKeyAccessor(d));\n }\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * Legend is a attachable widget that can be added to other dc charts to render horizontal legend\n * labels.\n * Examples:\n * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/)\n * - [Canadian City Crime Stats](http://dc-js.github.com/dc.js/crime/index.html)\n * @name legend\n * @memberof dc\n * @example\n * chart.legend(dc.legend().x(400).y(10).itemHeight(13).gap(5))\n * @returns {Legend}\n */\ndc.legend = function () {\n var LABEL_GAP = 2;\n\n var _legend = {},\n _parent,\n _x = 0,\n _y = 0,\n _itemHeight = 12,\n _gap = 5,\n _horizontal = false,\n _legendWidth = 560,\n _itemWidth = 70,\n _autoItemWidth = false;\n\n var _g;\n\n _legend.parent = function (p) {\n if (!arguments.length) {\n return _parent;\n }\n _parent = p;\n return _legend;\n };\n\n _legend.render = function () {\n _parent.svg().select('g.dc-legend').remove();\n _g = _parent.svg().append('g')\n .attr('class', 'dc-legend')\n .attr('transform', 'translate(' + _x + ',' + _y + ')');\n var legendables = _parent.legendables();\n\n var itemEnter = _g.selectAll('g.dc-legend-item')\n .data(legendables)\n .enter()\n .append('g')\n .attr('class', 'dc-legend-item')\n .on('mouseover', function (d) {\n _parent.legendHighlight(d);\n })\n .on('mouseout', function (d) {\n _parent.legendReset(d);\n })\n .on('click', function (d) {\n d.chart.legendToggle(d);\n });\n\n _g.selectAll('g.dc-legend-item')\n .classed('fadeout', function (d) {\n return d.chart.isLegendableHidden(d);\n });\n\n if (legendables.some(dc.pluck('dashstyle'))) {\n itemEnter\n .append('line')\n .attr('x1', 0)\n .attr('y1', _itemHeight / 2)\n .attr('x2', _itemHeight)\n .attr('y2', _itemHeight / 2)\n .attr('stroke-width', 2)\n .attr('stroke-dasharray', dc.pluck('dashstyle'))\n .attr('stroke', dc.pluck('color'));\n } else {\n itemEnter\n .append('rect')\n .attr('width', _itemHeight)\n .attr('height', _itemHeight)\n .attr('fill', function (d) {return d ? d.color : 'blue';});\n }\n\n itemEnter.append('text')\n .text(dc.pluck('name'))\n .attr('x', _itemHeight + LABEL_GAP)\n .attr('y', function () {\n return _itemHeight / 2 + (this.clientHeight ? this.clientHeight : 13) / 2 - 2;\n });\n\n var _cumulativeLegendTextWidth = 0;\n var row = 0;\n itemEnter.attr('transform', function (d, i) {\n if (_horizontal) {\n var translateBy = 'translate(' + _cumulativeLegendTextWidth + ',' + row * legendItemHeight() + ')';\n var itemWidth = _autoItemWidth === true ? this.getBBox().width + _gap : _itemWidth;\n\n if ((_cumulativeLegendTextWidth + itemWidth) >= _legendWidth) {\n ++row ;\n _cumulativeLegendTextWidth = 0 ;\n } else {\n _cumulativeLegendTextWidth += itemWidth;\n }\n return translateBy;\n } else {\n return 'translate(0,' + i * legendItemHeight() + ')';\n }\n });\n };\n\n function legendItemHeight () {\n return _gap + _itemHeight;\n }\n\n /**\n * Set or get x coordinate for legend widget.\n * @name x\n * @memberof dc.legend\n * @instance\n * @param {Number} [x=0]\n * @returns {Legend}\n */\n _legend.x = function (x) {\n if (!arguments.length) {\n return _x;\n }\n _x = x;\n return _legend;\n };\n\n /**\n * Set or get y coordinate for legend widget.\n * @name y\n * @memberof dc.legend\n * @instance\n * @param {Number} [y=0]\n * @returns {Legend}\n */\n _legend.y = function (y) {\n if (!arguments.length) {\n return _y;\n }\n _y = y;\n return _legend;\n };\n\n /**\n * Set or get gap between legend items.\n * @name gap\n * @memberof dc.legend\n * @instance\n * @param {Number} [gap=5]\n * @returns {Legend}\n */\n _legend.gap = function (gap) {\n if (!arguments.length) {\n return _gap;\n }\n _gap = gap;\n return _legend;\n };\n\n /**\n * Set or get legend item height.\n * @name itemHeight\n * @memberof dc.legend\n * @instance\n * @param {Number} [itemHeight=12]\n * @returns {Legend}\n */\n _legend.itemHeight = function (itemHeight) {\n if (!arguments.length) {\n return _itemHeight;\n }\n _itemHeight = itemHeight;\n return _legend;\n };\n\n /**\n * Position legend horizontally instead of vertically.\n * @name horizontal\n * @memberof dc.legend\n * @instance\n * @param {Boolean} [horizontal=false]\n * @returns {Legend}\n */\n _legend.horizontal = function (horizontal) {\n if (!arguments.length) {\n return _horizontal;\n }\n _horizontal = horizontal;\n return _legend;\n };\n\n /**\n * Maximum width for horizontal legend.\n * @name legendWidth\n * @memberof dc.legend\n * @instance\n * @param {Number} [legendWidth=500]\n * @returns {Legend}\n */\n _legend.legendWidth = function (legendWidth) {\n if (!arguments.length) {\n return _legendWidth;\n }\n _legendWidth = legendWidth;\n return _legend;\n };\n\n /**\n * legendItem width for horizontal legend.\n * @name itemWidth\n * @memberof dc.legend\n * @instance\n * @param {Number} [itemWidth=70]\n * @returns {Legend}\n */\n _legend.itemWidth = function (itemWidth) {\n if (!arguments.length) {\n return _itemWidth;\n }\n _itemWidth = itemWidth;\n return _legend;\n };\n\n /**\n * Turn automatic width for legend items on or off. If true, itemWidth() is ignored.\n * This setting takes into account gap().\n * @name autoItemWidth\n * @memberof dc.legend\n * @instance\n * @param {Boolean} [autoItemWidth=false]\n * @returns {Legend}\n */\n _legend.autoItemWidth = function (autoItemWidth) {\n if (!arguments.length) {\n return _autoItemWidth;\n }\n _autoItemWidth = autoItemWidth;\n return _legend;\n };\n\n return _legend;\n};\n","/**\n * A scatter plot chart\n * @name scatterPlot\n * @memberof dc\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a scatter plot under #chart-container1 element using the default global chart group\n * var chart1 = dc.scatterPlot('#chart-container1');\n * // create a scatter plot under #chart-container2 element using chart group A\n * var chart2 = dc.scatterPlot('#chart-container2', 'chartGroupA');\n * // create a sub-chart under a composite parent chart\n * var chart3 = dc.scatterPlot(compositeChart);\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {SeriesChart}\n */\ndc.scatterPlot = function (parent, chartGroup) {\n var _chart = dc.coordinateGridMixin({});\n var _symbol = d3.svg.symbol();\n\n var _existenceAccessor = function (d) { return d.value; };\n\n var originalKeyAccessor = _chart.keyAccessor();\n _chart.keyAccessor(function (d) { return originalKeyAccessor(d)[0]; });\n _chart.valueAccessor(function (d) { return originalKeyAccessor(d)[1]; });\n _chart.colorAccessor(function () { return _chart._groupName; });\n\n var _locator = function (d) {\n return 'translate(' + _chart.x()(_chart.keyAccessor()(d)) + ',' +\n _chart.y()(_chart.valueAccessor()(d)) + ')';\n };\n\n var _symbolSize = 3;\n var _highlightedSize = 5;\n var _hiddenSize = 0;\n\n _symbol.size(function (d) {\n if (!_existenceAccessor(d)) {\n return _hiddenSize;\n } else if (this.filtered) {\n return Math.pow(_highlightedSize, 2);\n } else {\n return Math.pow(_symbolSize, 2);\n }\n });\n\n dc.override(_chart, '_filter', function (filter) {\n if (!arguments.length) {\n return _chart.__filter();\n }\n\n return _chart.__filter(dc.filters.RangedTwoDimensionalFilter(filter));\n });\n\n _chart.plotData = function () {\n var symbols = _chart.chartBodyG().selectAll('path.symbol')\n .data(_chart.data());\n\n symbols\n .enter()\n .append('path')\n .attr('class', 'symbol')\n .attr('opacity', 0)\n .attr('fill', _chart.getColor)\n .attr('transform', _locator);\n\n dc.transition(symbols, _chart.transitionDuration())\n .attr('opacity', function (d) { return _existenceAccessor(d) ? 1 : 0; })\n .attr('fill', _chart.getColor)\n .attr('transform', _locator)\n .attr('d', _symbol);\n\n dc.transition(symbols.exit(), _chart.transitionDuration())\n .attr('opacity', 0).remove();\n };\n\n /**\n * Get or set the existence accessor. If a point exists, it is drawn with symbolSize radius and\n * opacity 1; if it does not exist, it is drawn with hiddenSize radius and opacity 0. By default,\n * the existence accessor checks if the reduced value is truthy.\n * @name existenceAccessor\n * @memberof dc.scatterPlot\n * @instance\n * @param {Function} [accessor]\n * @returns {Chart}\n */\n _chart.existenceAccessor = function (accessor) {\n if (!arguments.length) {\n return _existenceAccessor;\n }\n _existenceAccessor = accessor;\n return this;\n };\n\n /**\n * Get or set the symbol type used for each point. By default the symbol is a circle. See the D3\n * [docs](https://github.com/mbostock/d3/wiki/SVG-Shapes#wiki-symbol_type) for acceptable types.\n * Type can be a constant or an accessor.\n * @name symbol\n * @memberof dc.scatterPlot\n * @instance\n * @param {Function} [type]\n * @returns {Chart}\n */\n _chart.symbol = function (type) {\n if (!arguments.length) {\n return _symbol.type();\n }\n _symbol.type(type);\n return _chart;\n };\n\n /**\n * Set or get radius for symbols.\n * @name symbolSize\n * @memberof dc.scatterPlot\n * @instance\n * @param {Number} [symbolSize=3]\n * @returns {Chart}\n */\n _chart.symbolSize = function (symbolSize) {\n if (!arguments.length) {\n return _symbolSize;\n }\n _symbolSize = symbolSize;\n return _chart;\n };\n\n /**\n * Set or get radius for highlighted symbols.\n * @name highlightedSize\n * @memberof dc.scatterPlot\n * @instance\n * @param {Number} [highlightedSize=5]\n * @returns {Chart}\n */\n _chart.highlightedSize = function (highlightedSize) {\n if (!arguments.length) {\n return _highlightedSize;\n }\n _highlightedSize = highlightedSize;\n return _chart;\n };\n\n /**\n * Set or get radius for symbols when the group is empty.\n * @name hiddenSize\n * @memberof dc.scatterPlot\n * @instance\n * @param {Number} [hiddenSize=0]\n * @returns {Chart}\n */\n _chart.hiddenSize = function (hiddenSize) {\n if (!arguments.length) {\n return _hiddenSize;\n }\n _hiddenSize = hiddenSize;\n return _chart;\n };\n\n _chart.legendables = function () {\n return [{chart: _chart, name: _chart._groupName, color: _chart.getColor()}];\n };\n\n _chart.legendHighlight = function (d) {\n resizeSymbolsWhere(function (symbol) {\n return symbol.attr('fill') === d.color;\n }, _highlightedSize);\n _chart.selectAll('.chart-body path.symbol').filter(function () {\n return d3.select(this).attr('fill') !== d.color;\n }).classed('fadeout', true);\n };\n\n _chart.legendReset = function (d) {\n resizeSymbolsWhere(function (symbol) {\n return symbol.attr('fill') === d.color;\n }, _symbolSize);\n _chart.selectAll('.chart-body path.symbol').filter(function () {\n return d3.select(this).attr('fill') !== d.color;\n }).classed('fadeout', false);\n };\n\n function resizeSymbolsWhere (condition, size) {\n var symbols = _chart.selectAll('.chart-body path.symbol').filter(function () {\n return condition(d3.select(this));\n });\n var oldSize = _symbol.size();\n _symbol.size(Math.pow(size, 2));\n dc.transition(symbols, _chart.transitionDuration()).attr('d', _symbol);\n _symbol.size(oldSize);\n }\n\n _chart.setHandlePaths = function () {\n // no handle paths for poly-brushes\n };\n\n _chart.extendBrush = function () {\n var extent = _chart.brush().extent();\n if (_chart.round()) {\n extent[0] = extent[0].map(_chart.round());\n extent[1] = extent[1].map(_chart.round());\n\n _chart.g().select('.brush')\n .call(_chart.brush().extent(extent));\n }\n return extent;\n };\n\n _chart.brushIsEmpty = function (extent) {\n return _chart.brush().empty() || !extent || extent[0][0] >= extent[1][0] || extent[0][1] >= extent[1][1];\n };\n\n function resizeFiltered (filter) {\n var symbols = _chart.selectAll('.chart-body path.symbol').each(function (d) {\n this.filtered = filter && filter.isFiltered(d.key);\n });\n\n dc.transition(symbols, _chart.transitionDuration()).attr('d', _symbol);\n }\n\n _chart._brushing = function () {\n var extent = _chart.extendBrush();\n\n _chart.redrawBrush(_chart.g());\n\n if (_chart.brushIsEmpty(extent)) {\n dc.events.trigger(function () {\n _chart.filter(null);\n _chart.redrawGroup();\n });\n\n resizeFiltered(false);\n\n } else {\n var ranged2DFilter = dc.filters.RangedTwoDimensionalFilter(extent);\n dc.events.trigger(function () {\n _chart.filter(null);\n _chart.filter(ranged2DFilter);\n _chart.redrawGroup();\n }, dc.constants.EVENT_DELAY);\n\n resizeFiltered(ranged2DFilter);\n }\n };\n\n _chart.setBrushY = function (gBrush) {\n gBrush.call(_chart.brush().y(_chart.y()));\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A display of a single numeric value.\n * Unlike other charts, you do not need to set a dimension. Instead a group object must be provided and\n * a valueAccessor that returns a single value.\n * @name numberDisplay\n * @memberof dc\n * @mixes dc.baseMixin\n * @example\n * // create a number display under #chart-container1 element using the default global chart group\n * var display1 = dc.numberDisplay('#chart-container1');\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {NumberDisplay}\n */\ndc.numberDisplay = function (parent, chartGroup) {\n var SPAN_CLASS = 'number-display';\n var _formatNumber = d3.format('.2s');\n var _chart = dc.baseMixin({});\n var _html = {one: '', some: '', none: ''};\n\n // dimension not required\n _chart._mandatoryAttributes(['group']);\n\n /**\n * Gets or sets an optional object specifying HTML templates to use depending on the number\n * displayed. The text `%number` will be replaced with the current value.\n * - one: HTML template to use if the number is 1\n * - zero: HTML template to use if the number is 0\n * - some: HTML template to use otherwise\n * @name html\n * @memberof dc.numberDisplay\n * @instance\n * @example\n * numberWidget.html({\n * one:'%number record',\n * some:'%number records',\n * none:'no records'})\n * @param {{one:String, some:String, none:String}} [html={one: '', some: '', none: ''}]\n * @returns {Chart}\n */\n _chart.html = function (html) {\n if (!arguments.length) {\n return _html;\n }\n if (html.none) {\n _html.none = html.none;//if none available\n } else if (html.one) {\n _html.none = html.one;//if none not available use one\n } else if (html.some) {\n _html.none = html.some;//if none and one not available use some\n }\n if (html.one) {\n _html.one = html.one;//if one available\n } else if (html.some) {\n _html.one = html.some;//if one not available use some\n }\n if (html.some) {\n _html.some = html.some;//if some available\n } else if (html.one) {\n _html.some = html.one;//if some not available use one\n }\n return _chart;\n };\n\n /**\n * Calculate and return the underlying value of the display\n * @name value\n * @memberof dc.numberDisplay\n * @instance\n * @returns {Number}\n */\n _chart.value = function () {\n return _chart.data();\n };\n\n _chart.data(function (group) {\n var valObj = group.value ? group.value() : group.top(1)[0];\n return _chart.valueAccessor()(valObj);\n });\n\n _chart.transitionDuration(250); // good default\n\n _chart._doRender = function () {\n var newValue = _chart.value(),\n span = _chart.selectAll('.' + SPAN_CLASS);\n\n if (span.empty()) {\n span = span.data([0])\n .enter()\n .append('span')\n .attr('class', SPAN_CLASS);\n }\n\n span.transition()\n .duration(_chart.transitionDuration())\n .ease('quad-out-in')\n .tween('text', function () {\n var interp = d3.interpolateNumber(this.lastValue || 0, newValue);\n this.lastValue = newValue;\n return function (t) {\n var html = null, num = _chart.formatNumber()(interp(t));\n if (newValue === 0 && (_html.none !== '')) {\n html = _html.none;\n } else if (newValue === 1 && (_html.one !== '')) {\n html = _html.one;\n } else if (_html.some !== '') {\n html = _html.some;\n }\n this.innerHTML = html ? html.replace('%number', num) : num;\n };\n });\n };\n\n _chart._doRedraw = function () {\n return _chart._doRender();\n };\n\n /**\n * Get or set a function to format the value for the display.\n * @name formatNumber\n * @memberof dc.numberDisplay\n * @instance\n * @param {Function} [formatter=d3.format('.2s')]\n * @returns {Chart}\n */\n _chart.formatNumber = function (formatter) {\n if (!arguments.length) {\n return _formatNumber;\n }\n _formatNumber = formatter;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * A heat map is matrix that represents the values of two dimensions of data using colors.\n * @name heatMap\n * @memberof dc\n * @mixes dc.colorMixin\n * @mixes dc.marginMixin\n * @mixes dc.baseMixin\n * @example\n * // create a heat map under #chart-container1 element using the default global chart group\n * var heatMap1 = dc.heatMap('#chart-container1');\n * // create a heat map under #chart-container2 element using chart group A\n * var heatMap2 = dc.heatMap('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {HeatMap}\n */\ndc.heatMap = function (parent, chartGroup) {\n\n var DEFAULT_BORDER_RADIUS = 6.75;\n\n var _chartBody;\n\n var _cols;\n var _rows;\n var _colOrdering = d3.ascending;\n var _rowOrdering = d3.ascending;\n var _colScale = d3.scale.ordinal();\n var _rowScale = d3.scale.ordinal();\n\n var _xBorderRadius = DEFAULT_BORDER_RADIUS;\n var _yBorderRadius = DEFAULT_BORDER_RADIUS;\n\n var _chart = dc.colorMixin(dc.marginMixin(dc.baseMixin({})));\n _chart._mandatoryAttributes(['group']);\n _chart.title(_chart.colorAccessor());\n\n var _colsLabel = function (d) {\n return d;\n };\n var _rowsLabel = function (d) {\n return d;\n };\n\n /**\n * Set or get the column label function. The chart class uses this function to render\n * column labels on the X axis. It is passed the column name.\n * @name colsLabel\n * @memberof dc.heatMap\n * @instance\n * @example\n * // the default label function just returns the name\n * chart.colsLabel(function(d) { return d; });\n * @param {Function} [labelFunction=function(d) { return d; }]\n * @returns {Chart}\n */\n _chart.colsLabel = function (labelFunction) {\n if (!arguments.length) {\n return _colsLabel;\n }\n _colsLabel = labelFunction;\n return _chart;\n };\n\n /**\n * Set or get the row label function. The chart class uses this function to render\n * row labels on the Y axis. It is passed the row name.\n * @name rowsLabel\n * @memberof dc.heatMap\n * @instance\n * @example\n * // the default label function just returns the name\n * chart.rowsLabel(function(d) { return d; });\n * @param {Function} [labelFunction=function(d) { return d; }]\n * @returns {Chart}\n */\n _chart.rowsLabel = function (labelFunction) {\n if (!arguments.length) {\n return _rowsLabel;\n }\n _rowsLabel = labelFunction;\n return _chart;\n };\n\n var _xAxisOnClick = function (d) { filterAxis(0, d); };\n var _yAxisOnClick = function (d) { filterAxis(1, d); };\n var _boxOnClick = function (d) {\n var filter = d.key;\n dc.events.trigger(function () {\n _chart.filter(filter);\n _chart.redrawGroup();\n });\n };\n\n function filterAxis (axis, value) {\n var cellsOnAxis = _chart.selectAll('.box-group').filter(function (d) {\n return d.key[axis] === value;\n });\n var unfilteredCellsOnAxis = cellsOnAxis.filter(function (d) {\n return !_chart.hasFilter(d.key);\n });\n dc.events.trigger(function () {\n if (unfilteredCellsOnAxis.empty()) {\n cellsOnAxis.each(function (d) {\n _chart.filter(d.key);\n });\n } else {\n unfilteredCellsOnAxis.each(function (d) {\n _chart.filter(d.key);\n });\n }\n _chart.redrawGroup();\n });\n }\n\n dc.override(_chart, 'filter', function (filter) {\n if (!arguments.length) {\n return _chart._filter();\n }\n\n return _chart._filter(dc.filters.TwoDimensionalFilter(filter));\n });\n\n /**\n * Gets or sets the values used to create the rows of the heatmap, as an array. By default, all\n * the values will be fetched from the data using the value accessor.\n * @name rows\n * @memberof dc.heatMap\n * @instance\n * @param {Array} [rows]\n * @returns {Chart}\n */\n\n _chart.rows = function (rows) {\n if (!arguments.length) {\n return _rows;\n }\n _rows = rows;\n return _chart;\n };\n\n /**\n #### .rowOrdering([orderFunction])\n Get or set an accessor to order the rows. Default is d3.ascending.\n */\n _chart.rowOrdering = function (_) {\n if (!arguments.length) {\n return _rowOrdering;\n }\n _rowOrdering = _;\n return _chart;\n };\n\n /**\n * Gets or sets the keys used to create the columns of the heatmap, as an array. By default, all\n * the values will be fetched from the data using the key accessor.\n * @name cols\n * @memberof dc.heatMap\n * @instance\n * @param {Array} [cols]\n * @returns {Chart}\n */\n _chart.cols = function (cols) {\n if (!arguments.length) {\n return _cols;\n }\n _cols = cols;\n return _chart;\n };\n\n /**\n #### .colOrdering([orderFunction])\n Get or set an accessor to order the cols. Default is ascending.\n */\n _chart.colOrdering = function (_) {\n if (!arguments.length) {\n return _colOrdering;\n }\n _colOrdering = _;\n return _chart;\n };\n\n _chart._doRender = function () {\n _chart.resetSvg();\n\n _chartBody = _chart.svg()\n .append('g')\n .attr('class', 'heatmap')\n .attr('transform', 'translate(' + _chart.margins().left + ',' + _chart.margins().top + ')');\n\n return _chart._doRedraw();\n };\n\n _chart._doRedraw = function () {\n var data = _chart.data(),\n rows = _chart.rows() || data.map(_chart.valueAccessor()),\n cols = _chart.cols() || data.map(_chart.keyAccessor());\n if (_rowOrdering) {\n rows = rows.sort(_rowOrdering);\n }\n if (_colOrdering) {\n cols = cols.sort(_colOrdering);\n }\n rows = _rowScale.domain(rows);\n cols = _colScale.domain(cols);\n\n var rowCount = rows.domain().length,\n colCount = cols.domain().length,\n boxWidth = Math.floor(_chart.effectiveWidth() / colCount),\n boxHeight = Math.floor(_chart.effectiveHeight() / rowCount);\n\n cols.rangeRoundBands([0, _chart.effectiveWidth()]);\n rows.rangeRoundBands([_chart.effectiveHeight(), 0]);\n\n var boxes = _chartBody.selectAll('g.box-group').data(_chart.data(), function (d, i) {\n return _chart.keyAccessor()(d, i) + '\\0' + _chart.valueAccessor()(d, i);\n });\n var gEnter = boxes.enter().append('g')\n .attr('class', 'box-group');\n\n gEnter.append('rect')\n .attr('class', 'heat-box')\n .attr('fill', 'white')\n .on('click', _chart.boxOnClick());\n\n if (_chart.renderTitle()) {\n gEnter.append('title');\n boxes.selectAll('title').text(_chart.title());\n }\n\n dc.transition(boxes.selectAll('rect'), _chart.transitionDuration())\n .attr('x', function (d, i) { return cols(_chart.keyAccessor()(d, i)); })\n .attr('y', function (d, i) { return rows(_chart.valueAccessor()(d, i)); })\n .attr('rx', _xBorderRadius)\n .attr('ry', _yBorderRadius)\n .attr('fill', _chart.getColor)\n .attr('width', boxWidth)\n .attr('height', boxHeight);\n\n boxes.exit().remove();\n\n var gCols = _chartBody.selectAll('g.cols');\n if (gCols.empty()) {\n gCols = _chartBody.append('g').attr('class', 'cols axis');\n }\n var gColsText = gCols.selectAll('text').data(cols.domain());\n gColsText.enter().append('text')\n .attr('x', function (d) { return cols(d) + boxWidth / 2; })\n .style('text-anchor', 'middle')\n .attr('y', _chart.effectiveHeight())\n .attr('dy', 12)\n .on('click', _chart.xAxisOnClick())\n .text(_chart.colsLabel());\n dc.transition(gColsText, _chart.transitionDuration())\n .text(_chart.colsLabel())\n .attr('x', function (d) { return cols(d) + boxWidth / 2; })\n .attr('y', _chart.effectiveHeight());\n gColsText.exit().remove();\n var gRows = _chartBody.selectAll('g.rows');\n if (gRows.empty()) {\n gRows = _chartBody.append('g').attr('class', 'rows axis');\n }\n var gRowsText = gRows.selectAll('text').data(rows.domain());\n gRowsText.enter().append('text')\n .attr('dy', 6)\n .style('text-anchor', 'end')\n .attr('x', 0)\n .attr('dx', -2)\n .on('click', _chart.yAxisOnClick())\n .text(_chart.rowsLabel());\n dc.transition(gRowsText, _chart.transitionDuration())\n .text(_chart.rowsLabel())\n .attr('y', function (d) { return rows(d) + boxHeight / 2; });\n gRowsText.exit().remove();\n\n if (_chart.hasFilter()) {\n _chart.selectAll('g.box-group').each(function (d) {\n if (_chart.isSelectedNode(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n _chart.selectAll('g.box-group').each(function () {\n _chart.resetHighlight(this);\n });\n }\n return _chart;\n };\n\n /**\n * Gets or sets the handler that fires when an individual cell is clicked in the heatmap.\n * By default, filtering of the cell will be toggled.\n * @name boxOnClick\n * @memberof dc.heatMap\n * @instance\n * @param {Function} [handler]\n * @returns {Chart}\n */\n _chart.boxOnClick = function (handler) {\n if (!arguments.length) {\n return _boxOnClick;\n }\n _boxOnClick = handler;\n return _chart;\n };\n\n /**\n * Gets or sets the handler that fires when a column tick is clicked in the x axis.\n * By default, if any cells in the column are unselected, the whole column will be selected,\n * otherwise the whole column will be unselected.\n * @name xAxisOnClick\n * @memberof dc.heatMap\n * @instance\n * @param {Function} [handler]\n * @returns {Chart}\n */\n _chart.xAxisOnClick = function (handler) {\n if (!arguments.length) {\n return _xAxisOnClick;\n }\n _xAxisOnClick = handler;\n return _chart;\n };\n\n /**\n * Gets or sets the handler that fires when a row tick is clicked in the y axis.\n * By default, if any cells in the row are unselected, the whole row will be selected,\n * otherwise the whole row will be unselected.\n * @name yAxisOnClick\n * @memberof dc.heatMap\n * @instance\n * @param {Function} [handler]\n * @returns {Chart}\n */\n _chart.yAxisOnClick = function (handler) {\n if (!arguments.length) {\n return _yAxisOnClick;\n }\n _yAxisOnClick = handler;\n return _chart;\n };\n\n /**\n * Gets or sets the X border radius. Set to 0 to get full rectangles.\n * @name xBorderRadius\n * @memberof dc.heatMap\n * @instance\n * @param {Number} [xBorderRadius=6.75]\n * @returns {Chart}\n */\n _chart.xBorderRadius = function (xBorderRadius) {\n if (!arguments.length) {\n return _xBorderRadius;\n }\n _xBorderRadius = xBorderRadius;\n return _chart;\n };\n\n /**\n * Gets or sets the Y border radius. Set to 0 to get full rectangles.\n * @name yBorderRadius\n * @memberof dc.heatMap\n * @instance\n * @param {Number} [yBorderRadius=6.75]\n * @returns {Chart}\n */\n _chart.yBorderRadius = function (yBorderRadius) {\n if (!arguments.length) {\n return _yBorderRadius;\n }\n _yBorderRadius = yBorderRadius;\n return _chart;\n };\n\n _chart.isSelectedNode = function (d) {\n return _chart.hasFilter(d.key);\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","// https://github.com/d3/d3-plugins/blob/master/box/box.js\n(function () {\n\n // Inspired by http://informationandvisualization.de/blog/box-plot\n d3.box = function () {\n var width = 1,\n height = 1,\n duration = 0,\n domain = null,\n value = Number,\n whiskers = boxWhiskers,\n quartiles = boxQuartiles,\n tickFormat = null;\n\n // For each small multiple…\n function box (g) {\n g.each(function (d, i) {\n d = d.map(value).sort(d3.ascending);\n var g = d3.select(this),\n n = d.length,\n min = d[0],\n max = d[n - 1];\n\n // Compute quartiles. Must return exactly 3 elements.\n var quartileData = d.quartiles = quartiles(d);\n\n // Compute whiskers. Must return exactly 2 elements, or null.\n var whiskerIndices = whiskers && whiskers.call(this, d, i),\n whiskerData = whiskerIndices && whiskerIndices.map(function (i) { return d[i]; });\n\n // Compute outliers. If no whiskers are specified, all data are 'outliers'.\n // We compute the outliers as indices, so that we can join across transitions!\n var outlierIndices = whiskerIndices ?\n d3.range(0, whiskerIndices[0]).concat(d3.range(whiskerIndices[1] + 1, n)) : d3.range(n);\n\n // Compute the new x-scale.\n var x1 = d3.scale.linear()\n .domain(domain && domain.call(this, d, i) || [min, max])\n .range([height, 0]);\n\n // Retrieve the old x-scale, if this is an update.\n var x0 = this.__chart__ || d3.scale.linear()\n .domain([0, Infinity])\n .range(x1.range());\n\n // Stash the new scale.\n this.__chart__ = x1;\n\n // Note: the box, median, and box tick elements are fixed in number,\n // so we only have to handle enter and update. In contrast, the outliers\n // and other elements are variable, so we need to exit them! Variable\n // elements also fade in and out.\n\n // Update center line: the vertical line spanning the whiskers.\n var center = g.selectAll('line.center')\n .data(whiskerData ? [whiskerData] : []);\n\n center.enter().insert('line', 'rect')\n .attr('class', 'center')\n .attr('x1', width / 2)\n .attr('y1', function (d) { return x0(d[0]); })\n .attr('x2', width / 2)\n .attr('y2', function (d) { return x0(d[1]); })\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .style('opacity', 1)\n .attr('y1', function (d) { return x1(d[0]); })\n .attr('y2', function (d) { return x1(d[1]); });\n\n center.transition()\n .duration(duration)\n .style('opacity', 1)\n .attr('y1', function (d) { return x1(d[0]); })\n .attr('y2', function (d) { return x1(d[1]); });\n\n center.exit().transition()\n .duration(duration)\n .style('opacity', 1e-6)\n .attr('y1', function (d) { return x1(d[0]); })\n .attr('y2', function (d) { return x1(d[1]); })\n .remove();\n\n // Update innerquartile box.\n var box = g.selectAll('rect.box')\n .data([quartileData]);\n\n box.enter().append('rect')\n .attr('class', 'box')\n .attr('x', 0)\n .attr('y', function (d) { return x0(d[2]); })\n .attr('width', width)\n .attr('height', function (d) { return x0(d[0]) - x0(d[2]); })\n .transition()\n .duration(duration)\n .attr('y', function (d) { return x1(d[2]); })\n .attr('height', function (d) { return x1(d[0]) - x1(d[2]); });\n\n box.transition()\n .duration(duration)\n .attr('y', function (d) { return x1(d[2]); })\n .attr('height', function (d) { return x1(d[0]) - x1(d[2]); });\n\n // Update median line.\n var medianLine = g.selectAll('line.median')\n .data([quartileData[1]]);\n\n medianLine.enter().append('line')\n .attr('class', 'median')\n .attr('x1', 0)\n .attr('y1', x0)\n .attr('x2', width)\n .attr('y2', x0)\n .transition()\n .duration(duration)\n .attr('y1', x1)\n .attr('y2', x1);\n\n medianLine.transition()\n .duration(duration)\n .attr('y1', x1)\n .attr('y2', x1);\n\n // Update whiskers.\n var whisker = g.selectAll('line.whisker')\n .data(whiskerData || []);\n\n whisker.enter().insert('line', 'circle, text')\n .attr('class', 'whisker')\n .attr('x1', 0)\n .attr('y1', x0)\n .attr('x2', width)\n .attr('y2', x0)\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .attr('y1', x1)\n .attr('y2', x1)\n .style('opacity', 1);\n\n whisker.transition()\n .duration(duration)\n .attr('y1', x1)\n .attr('y2', x1)\n .style('opacity', 1);\n\n whisker.exit().transition()\n .duration(duration)\n .attr('y1', x1)\n .attr('y2', x1)\n .style('opacity', 1e-6)\n .remove();\n\n // Update outliers.\n var outlier = g.selectAll('circle.outlier')\n .data(outlierIndices, Number);\n\n outlier.enter().insert('circle', 'text')\n .attr('class', 'outlier')\n .attr('r', 5)\n .attr('cx', width / 2)\n .attr('cy', function (i) { return x0(d[i]); })\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .attr('cy', function (i) { return x1(d[i]); })\n .style('opacity', 1);\n\n outlier.transition()\n .duration(duration)\n .attr('cy', function (i) { return x1(d[i]); })\n .style('opacity', 1);\n\n outlier.exit().transition()\n .duration(duration)\n .attr('cy', function (i) { return x1(d[i]); })\n .style('opacity', 1e-6)\n .remove();\n\n // Compute the tick format.\n var format = tickFormat || x1.tickFormat(8);\n\n // Update box ticks.\n var boxTick = g.selectAll('text.box')\n .data(quartileData);\n\n boxTick.enter().append('text')\n .attr('class', 'box')\n .attr('dy', '.3em')\n .attr('dx', function (d, i) { return i & 1 ? 6 : -6; })\n .attr('x', function (d, i) { return i & 1 ? width : 0; })\n .attr('y', x0)\n .attr('text-anchor', function (d, i) { return i & 1 ? 'start' : 'end'; })\n .text(format)\n .transition()\n .duration(duration)\n .attr('y', x1);\n\n boxTick.transition()\n .duration(duration)\n .text(format)\n .attr('y', x1);\n\n // Update whisker ticks. These are handled separately from the box\n // ticks because they may or may not exist, and we want don't want\n // to join box ticks pre-transition with whisker ticks post-.\n var whiskerTick = g.selectAll('text.whisker')\n .data(whiskerData || []);\n\n whiskerTick.enter().append('text')\n .attr('class', 'whisker')\n .attr('dy', '.3em')\n .attr('dx', 6)\n .attr('x', width)\n .attr('y', x0)\n .text(format)\n .style('opacity', 1e-6)\n .transition()\n .duration(duration)\n .attr('y', x1)\n .style('opacity', 1);\n\n whiskerTick.transition()\n .duration(duration)\n .text(format)\n .attr('y', x1)\n .style('opacity', 1);\n\n whiskerTick.exit().transition()\n .duration(duration)\n .attr('y', x1)\n .style('opacity', 1e-6)\n .remove();\n });\n d3.timer.flush();\n }\n\n box.width = function (x) {\n if (!arguments.length) {\n return width;\n }\n width = x;\n return box;\n };\n\n box.height = function (x) {\n if (!arguments.length) {\n return height;\n }\n height = x;\n return box;\n };\n\n box.tickFormat = function (x) {\n if (!arguments.length) {\n return tickFormat;\n }\n tickFormat = x;\n return box;\n };\n\n box.duration = function (x) {\n if (!arguments.length) {\n return duration;\n }\n duration = x;\n return box;\n };\n\n box.domain = function (x) {\n if (!arguments.length) {\n return domain;\n }\n domain = x === null ? x : d3.functor(x);\n return box;\n };\n\n box.value = function (x) {\n if (!arguments.length) {\n return value;\n }\n value = x;\n return box;\n };\n\n box.whiskers = function (x) {\n if (!arguments.length) {\n return whiskers;\n }\n whiskers = x;\n return box;\n };\n\n box.quartiles = function (x) {\n if (!arguments.length) {\n return quartiles;\n }\n quartiles = x;\n return box;\n };\n\n return box;\n };\n\n function boxWhiskers (d) {\n return [0, d.length - 1];\n }\n\n function boxQuartiles (d) {\n return [\n d3.quantile(d, 0.25),\n d3.quantile(d, 0.5),\n d3.quantile(d, 0.75)\n ];\n }\n\n})();\n","/**\n * A box plot is a chart that depicts numerical data via their quartile ranges.\n * Examples:\n * - [Nasdaq 100 Index](http://dc-js.github.com/dc.js/)\n * - [Canadian City Crime Stats](http://dc-js.github.com/dc.js/crime/index.html)\n * @name boxPlot\n * @memberof dc\n * @mixes dc.coordinateGridMixin\n * @example\n * // create a box plot under #chart-container1 element using the default global chart group\n * var boxPlot1 = dc.boxPlot('#chart-container1');\n * // create a box plot under #chart-container2 element using chart group A\n * var boxPlot2 = dc.boxPlot('#chart-container2', 'chartGroupA');\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\n * a dom block element such as a div; or a dom element or d3 selection. If the bar chart is a sub-chart\n * in a [Composite Chart](#composite-chart) then pass in the parent composite chart instance.\n * @param {String} [chartGroup] - The name of the chart group this chart instance should be placed in.\n * Interaction with a chart will only trigger events and redraws within the chart's group.\n * @returns {BoxPlot}\n */\ndc.boxPlot = function (parent, chartGroup) {\n var _chart = dc.coordinateGridMixin({});\n\n // Returns a function to compute the interquartile range.\n function DEFAULT_WHISKERS_IQR (k) {\n return function (d) {\n var q1 = d.quartiles[0],\n q3 = d.quartiles[2],\n iqr = (q3 - q1) * k,\n i = -1,\n j = d.length;\n do { ++i; } while (d[i] < q1 - iqr);\n do { --j; } while (d[j] > q3 + iqr);\n return [i, j];\n };\n }\n\n var _whiskerIqrFactor = 1.5;\n var _whiskersIqr = DEFAULT_WHISKERS_IQR;\n var _whiskers = _whiskersIqr(_whiskerIqrFactor);\n\n var _box = d3.box();\n var _tickFormat = null;\n\n var _boxWidth = function (innerChartWidth, xUnits) {\n if (_chart.isOrdinal()) {\n return _chart.x().rangeBand();\n } else {\n return innerChartWidth / (1 + _chart.boxPadding()) / xUnits;\n }\n };\n\n // default padding to handle min/max whisker text\n _chart.yAxisPadding(12);\n\n // default to ordinal\n _chart.x(d3.scale.ordinal());\n _chart.xUnits(dc.units.ordinal);\n\n // valueAccessor should return an array of values that can be coerced into numbers\n // or if data is overloaded for a static array of arrays, it should be `Number`.\n // Empty arrays are not included.\n _chart.data(function (group) {\n return group.all().map(function (d) {\n d.map = function (accessor) { return accessor.call(d, d); };\n return d;\n }).filter(function (d) {\n var values = _chart.valueAccessor()(d);\n return values.length !== 0;\n });\n });\n\n /**\n * Get or set the spacing between boxes as a fraction of box size. Valid values are within 0-1.\n * See the [d3 docs](https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-ordinal_rangeBands)\n * for a visual description of how the padding is applied.\n * @name boxPadding\n * @memberof dc.boxPlot\n * @instance\n * @param {Number} [padding=0.8]\n * @returns {Number}\n */\n _chart.boxPadding = _chart._rangeBandPadding;\n _chart.boxPadding(0.8);\n\n /**\n * Get or set the outer padding on an ordinal box chart. This setting has no effect on non-ordinal charts\n * or on charts with a custom `.boxWidth`. Will pad the width by `padding * barWidth` on each side of the chart.\n * @name outerPadding\n * @memberof dc.boxPlot\n * @instance\n * @param {Number} [padding=0.5]\n * @returns {Number}\n */\n _chart.outerPadding = _chart._outerRangeBandPadding;\n _chart.outerPadding(0.5);\n\n /**\n * Get or set the numerical width of the boxplot box. The width may also be a function taking as\n * parameters the chart width excluding the right and left margins, as well as the number of x\n * units.\n * @example\n * // Using numerical parameter\n * chart.boxWidth(10);\n * // Using function\n * chart.boxWidth((innerChartWidth, xUnits) { ... });\n * @name boxWidth\n * @memberof dc.boxPlot\n * @instance\n * @param {Number|Function} [boxWidth=0.5]\n * @returns {Number|Function}\n */\n _chart.boxWidth = function (boxWidth) {\n if (!arguments.length) {\n return _boxWidth;\n }\n _boxWidth = d3.functor(boxWidth);\n return _chart;\n };\n\n var boxTransform = function (d, i) {\n var xOffset = _chart.x()(_chart.keyAccessor()(d, i));\n return 'translate(' + xOffset + ', 0)';\n };\n\n _chart._preprocessData = function () {\n if (_chart.elasticX()) {\n _chart.x().domain([]);\n }\n };\n\n _chart.plotData = function () {\n var _calculatedBoxWidth = _boxWidth(_chart.effectiveWidth(), _chart.xUnitCount());\n\n _box.whiskers(_whiskers)\n .width(_calculatedBoxWidth)\n .height(_chart.effectiveHeight())\n .value(_chart.valueAccessor())\n .domain(_chart.y().domain())\n .duration(_chart.transitionDuration())\n .tickFormat(_tickFormat);\n\n var boxesG = _chart.chartBodyG().selectAll('g.box').data(_chart.data(), function (d) { return d.key; });\n\n renderBoxes(boxesG);\n updateBoxes(boxesG);\n removeBoxes(boxesG);\n\n _chart.fadeDeselectedArea();\n };\n\n function renderBoxes (boxesG) {\n var boxesGEnter = boxesG.enter().append('g');\n\n boxesGEnter\n .attr('class', 'box')\n .attr('transform', boxTransform)\n .call(_box)\n .on('click', function (d) {\n _chart.filter(d.key);\n _chart.redrawGroup();\n });\n }\n\n function updateBoxes (boxesG) {\n dc.transition(boxesG, _chart.transitionDuration())\n .attr('transform', boxTransform)\n .call(_box)\n .each(function () {\n d3.select(this).select('rect.box').attr('fill', _chart.getColor);\n });\n }\n\n function removeBoxes (boxesG) {\n boxesG.exit().remove().call(_box);\n }\n\n _chart.fadeDeselectedArea = function () {\n if (_chart.hasFilter()) {\n _chart.g().selectAll('g.box').each(function (d) {\n if (_chart.isSelectedNode(d)) {\n _chart.highlightSelected(this);\n } else {\n _chart.fadeDeselected(this);\n }\n });\n } else {\n _chart.g().selectAll('g.box').each(function () {\n _chart.resetHighlight(this);\n });\n }\n };\n\n _chart.isSelectedNode = function (d) {\n return _chart.hasFilter(d.key);\n };\n\n _chart.yAxisMin = function () {\n var min = d3.min(_chart.data(), function (e) {\n return d3.min(_chart.valueAccessor()(e));\n });\n return dc.utils.subtract(min, _chart.yAxisPadding());\n };\n\n _chart.yAxisMax = function () {\n var max = d3.max(_chart.data(), function (e) {\n return d3.max(_chart.valueAccessor()(e));\n });\n return dc.utils.add(max, _chart.yAxisPadding());\n };\n\n /**\n * Set the numerical format of the boxplot median, whiskers and quartile labels. Defaults to\n * integer formatting.\n * @example\n * // format ticks to 2 decimal places\n * chart.tickFormat(d3.format('.2f'));\n * @name tickFormat\n * @memberof dc.boxPlot\n * @instance\n * @param {Function} [tickFormat]\n * @returns {Number|Function}\n */\n _chart.tickFormat = function (tickFormat) {\n if (!arguments.length) {\n return _tickFormat;\n }\n _tickFormat = tickFormat;\n return _chart;\n };\n\n return _chart.anchor(parent, chartGroup);\n};\n","/**\n * The select menu is a simple widget designed to filter a dimension by selecting an option from\n * an HTML `` menu. The menu can be optionally turned into a multiselect.\r\n * @name selectMenu\r\n * @memberof dc\r\n * @mixes dc.baseMixin\r\n * @example\r\n * // create a select menu under #select-container using the default global chart group\r\n * var select = dc.selectMenu('#select-container')\r\n * .dimension(states)\r\n * .group(stateGroup);\r\n * // the option text can be set via the title() function\r\n * // by default the option text is '`key`: `value`'\r\n * select.title(function (d){\r\n * return 'STATE: ' + d.key;\r\n * })\r\n * @param {String|node|d3.selection|dc.compositeChart} parent - Any valid\r\n * [d3 single selector](https://github.com/mbostock/d3/wiki/Selections#selecting-elements) specifying\r\n * a dom block element such as a div; or a dom element or d3 selection.\r\n * @param {String} [chartGroup] - The name of the chart group this widget should be placed in.\r\n * Interaction with the widget will only trigger events and redraws within its group.\r\n * @returns {selectMenu}\r\n **/\r\ndc.selectMenu = function (parent, chartGroup) {\r\n var SELECT_CSS_CLASS = 'dc-select-menu';\r\n var OPTION_CSS_CLASS = 'dc-select-option';\r\n\r\n var _chart = dc.baseMixin({});\r\n\r\n var _select;\r\n var _promptText = 'Select all';\r\n var _multiple = false;\r\n var _size = null;\r\n var _order = function (a, b) {\r\n return _chart.keyAccessor()(a) > _chart.keyAccessor()(b) ?\r\n 1 : _chart.keyAccessor()(b) > _chart.keyAccessor()(a) ?\r\n -1 : 0;\r\n };\r\n\r\n var _filterDisplayed = function (d) {\r\n return _chart.valueAccessor()(d) > 0;\r\n };\r\n\r\n _chart.data(function (group) {\r\n return group.all().filter(_filterDisplayed);\r\n });\r\n\r\n _chart._doRender = function () {\r\n _chart.select('select').remove();\r\n _select = _chart.root().append('select')\r\n .classed(SELECT_CSS_CLASS, true);\r\n _select.append('option').text(_promptText).attr('value', '');\r\n\r\n _chart._doRedraw();\r\n return _chart;\r\n };\r\n\r\n _chart._doRedraw = function () {\r\n setAttributes();\r\n renderOptions();\r\n // select the option(s) corresponding to current filter(s)\r\n if (_chart.hasFilter() && _multiple) {\r\n _select.selectAll('option')\r\n .property('selected', function (d) {\r\n return d && _chart.filters().indexOf(String(_chart.keyAccessor()(d))) >= 0;\r\n });\r\n } else if (_chart.hasFilter()) {\r\n _select.property('value', _chart.filter());\r\n } else {\r\n _select.property('value', '');\r\n }\r\n return _chart;\r\n };\r\n\r\n function renderOptions () {\r\n var options = _select.selectAll('option.' + OPTION_CSS_CLASS)\r\n .data(_chart.data(), function (d) { return _chart.keyAccessor()(d); });\r\n\r\n options.enter()\r\n .append('option')\r\n .classed(OPTION_CSS_CLASS, true)\r\n .attr('value', function (d) { return _chart.keyAccessor()(d); });\r\n\r\n options.text(_chart.title());\r\n options.exit().remove();\r\n _select.selectAll('option.' + OPTION_CSS_CLASS).sort(_order);\r\n\r\n _select.on('change', onChange);\r\n return options;\r\n }\r\n\r\n function onChange (d, i) {\r\n var values;\r\n var target = d3.event.target;\r\n if (target.selectedOptions) {\r\n var selectedOptions = Array.prototype.slice.call(target.selectedOptions);\r\n values = selectedOptions.map(function (d) {\r\n return d.value;\r\n });\r\n } else { // IE and other browsers do not support selectedOptions\r\n // adapted from this polyfill: https://gist.github.com/brettz9/4212217\r\n var options = [].slice.call(d3.event.target.options);\r\n values = options.filter(function (option) {\r\n return option.selected;\r\n }).map(function (option) {\r\n return option.value;\r\n });\r\n }\r\n // console.log(values);\r\n // check if only prompt option is selected\r\n if (values.length === 1 && values[0] === '') {\r\n values = null;\r\n } else if (!_multiple && values.length === 1) {\r\n values = values[0];\r\n }\r\n _chart.onChange(values);\r\n }\r\n\r\n _chart.onChange = function (val) {\r\n if (val && _multiple) {\r\n _chart.replaceFilter([val]);\r\n } else if (val) {\r\n _chart.replaceFilter(val);\r\n } else {\r\n _chart.filterAll();\r\n }\r\n dc.events.trigger(function () {\r\n _chart.redrawGroup();\r\n });\r\n };\r\n\r\n function setAttributes () {\r\n if (_multiple) {\r\n _select.attr('multiple', true);\r\n } else {\r\n _select.attr('multiple', null);\r\n }\r\n if (_size !== null) {\r\n _select.attr('size', _size);\r\n } else {\r\n _select.attr('size', null);\r\n }\r\n }\r\n\r\n /**\r\n * Get or set the function that controls the ordering of option tags in the\r\n * select menu. By default options are ordered by the group key in ascending\r\n * order.\r\n * @name order\r\n * @memberof dc.selectMenu\r\n * @instance\r\n * @param {Function} [order]\r\n * @example\r\n * // order by the group's value\r\n * chart.order(function (a,b) {\r\n * return a.value > b.value ? 1 : b.value > a.value ? -1 : 0;\r\n * });\r\n **/\r\n _chart.order = function (order) {\r\n if (!arguments.length) {\r\n return _order;\r\n }\r\n _order = order;\r\n return _chart;\r\n };\r\n\r\n /**\r\n * Get or set the text displayed in the options used to prompt selection.\r\n * @name promptText\r\n * @memberof dc.selectMenu\r\n * @instance\r\n * @param {String} [promptText='Select all']\r\n * @example\r\n * chart.promptText('All states');\r\n **/\r\n _chart.promptText = function (_) {\r\n if (!arguments.length) {\r\n return _promptText;\r\n }\r\n _promptText = _;\r\n return _chart;\r\n };\r\n\r\n /**\r\n * Get or set the function that filters option tags prior to display. By default options\r\n * with a value of < 1 are not displayed.\r\n * @name filterDisplayed\r\n * @memberof dc.selectMenu\r\n * @instance\r\n * @param {function} [filterDisplayed]\r\n * @example\r\n * // display all options override the `filterDisplayed` function:\r\n * chart.filterDisplayed(function () {\r\n * return true;\r\n * });\r\n **/\r\n _chart.filterDisplayed = function (filterDisplayed) {\r\n if (!arguments.length) {\r\n return _filterDisplayed;\r\n }\r\n _filterDisplayed = filterDisplayed;\r\n return _chart;\r\n };\r\n\r\n /**\r\n * Controls the type of select menu. Setting it to true converts the underlying\r\n * HTML tag into a multiple select.\r\n * @name multiple\r\n * @memberof dc.selectMenu\r\n * @instance\r\n * @param {boolean} [multiple=false]\r\n * @example\r\n * chart.multiple(true);\r\n **/\r\n _chart.multiple = function (multiple) {\r\n if (!arguments.length) {\r\n return _multiple;\r\n }\r\n _multiple = multiple;\r\n\r\n return _chart;\r\n };\r\n\r\n /**\r\n * Controls the height, in lines, of the select menu, when `.multiple()` is true. If `null` (the default),\r\n * uses the browser's default height.\r\n * @name size\r\n * @memberof dc.selectMenu\r\n * @instance\r\n * @param {?number} [size\r\n * @example\r\n * chart.size(10);\r\n **/\r\n _chart.size = function (size) {\r\n if (!arguments.length) {\r\n return _size;\r\n }\r\n _size = size;\r\n\r\n return _chart;\r\n };\r\n\r\n return _chart.anchor(parent, chartGroup);\r\n};\r\n","// Renamed functions\r\n\r\ndc.abstractBubbleChart = dc.bubbleMixin;\r\ndc.baseChart = dc.baseMixin;\r\ndc.capped = dc.capMixin;\r\ndc.colorChart = dc.colorMixin;\r\ndc.coordinateGridChart = dc.coordinateGridMixin;\r\ndc.marginable = dc.marginMixin;\r\ndc.stackableChart = dc.stackMixin;\r\n\r\n// Expose d3 and crossfilter, so that clients in browserify\r\n// case can obtain them if they need them.\r\ndc.d3 = d3;\r\ndc.crossfilter = crossfilter;\r\n\r\nreturn dc;}\r\n if(typeof define === \"function\" && define.amd) {\r\n define([\"d3\", \"crossfilter\"], _dc);\r\n } else if(typeof module === \"object\" && module.exports) {\r\n var _d3 = require('d3');\r\n var _crossfilter = require('crossfilter');\r\n // When using npm + browserify, 'crossfilter' is a function,\r\n // since package.json specifies index.js as main function, and it\r\n // does special handling. When using bower + browserify,\r\n // there's no main in bower.json (in fact, there's no bower.json),\r\n // so we need to fix it.\r\n if (typeof _crossfilter !== \"function\") {\r\n _crossfilter = _crossfilter.crossfilter;\r\n }\r\n module.exports = _dc(_d3, _crossfilter);\r\n } else {\r\n this.dc = _dc(d3, crossfilter);\r\n }\r\n}\r\n)();\r\n"]} \ No newline at end of file diff --git a/dc.min.js b/dc.min.js index f2a960a77..4ba0616ff 100644 --- a/dc.min.js +++ b/dc.min.js @@ -19,5 +19,5 @@ !function(){function a(a,b){"use strict";var c={version:"2.1.0-dev",constants:{CHART_CLASS:"dc-chart",DEBUG_GROUP_CLASS:"debug",STACK_CLASS:"stack",DESELECTED_CLASS:"deselected",SELECTED_CLASS:"selected",NODE_INDEX_NAME:"__index__",GROUP_INDEX_NAME:"__group_index__",DEFAULT_CHART_GROUP:"__default_chart_group__",EVENT_DELAY:40,NEGLIGIBLE_NUMBER:1e-10},_renderlet:null};c.chartRegistry=function(){function a(a){return a||(a=c.constants.DEFAULT_CHART_GROUP),b[a]||(b[a]=[]),a}var b={};return{has:function(a){for(var c in b)if(b[c].indexOf(a)>=0)return!0;return!1},register:function(c,d){d=a(d),b[d].push(c)},deregister:function(c,d){d=a(d);for(var e=0;e=b||void 0===b||c.disableTransitions)return a;var f=a.transition(e).duration(b);return"function"==typeof d&&d(f),f},c.optionalTransition=function(a,b,d,e){return a?function(a){return c.transition(a,b,d,e)}:function(a){return a}},c.units={},c.units.integers=function(a,b){return Math.abs(b-a)},c.units.ordinal=function(a,b,c){return c},c.units.fp={},c.units.fp.precision=function(a){var b=function(a,d){var e=Math.abs((d-a)/b.resolution);return c.utils.isNegligible(e-Math.floor(e))?Math.floor(e):Math.ceil(e)};return b.resolution=a,b},c.round={},c.round.floor=function(a){return Math.floor(a)},c.round.ceil=function(a){return Math.ceil(a)},c.round.round=function(a){return Math.round(a)},c.override=function(a,b,c){var d=a[b];a["_"+b]=d,a[b]=c},c.renderlet=function(a){return arguments.length?(c._renderlet=a,c):c._renderlet},c.instanceOfChart=function(a){return a instanceof Object&&a.__dcFlag__&&!0},c.errors={},c.errors.Exception=function(a){var b=a||"Unexpected internal error";this.message=b,this.toString=function(){return b},this.stack=(new Error).stack},c.errors.Exception.prototype=Object.create(Error.prototype),c.errors.Exception.prototype.constructor=c.errors.Exception,c.errors.InvalidStateException=function(){c.errors.Exception.apply(this,arguments)},c.errors.InvalidStateException.prototype=Object.create(c.errors.Exception.prototype),c.errors.InvalidStateException.prototype.constructor=c.errors.InvalidStateException,c.errors.BadArgumentException=function(){c.errors.Exception.apply(this,arguments)},c.errors.BadArgumentException.prototype=Object.create(c.errors.Exception.prototype),c.errors.BadArgumentException.prototype.constructor=c.errors.BadArgumentException,c.dateFormat=a.time.format("%m/%d/%Y"),c.printers={},c.printers.filters=function(a){for(var b="",d=0;d0&&(b+=", "),b+=c.printers.filter(a[d]);return b},c.printers.filter=function(a){var b="";return"undefined"!=typeof a&&null!==a&&(a instanceof Array?a.length>=2?b="["+c.utils.printSingleValue(a[0])+" -> "+c.utils.printSingleValue(a[1])+"]":a.length>=1&&(b=c.utils.printSingleValue(a[0])):b=c.utils.printSingleValue(a)),b},c.pluck=function(a,b){return b?function(c,d){return b.call(c,c[a],d)}:function(b){return b[a]}},c.utils={},c.utils.printSingleValue=function(a){var b=""+a;return a instanceof Date?b=c.dateFormat(a):"string"==typeof a?b=a:c.utils.isFloat(a)?b=c.utils.printSingleValue.fformat(a):c.utils.isInteger(a)&&(b=Math.round(a)),b},c.utils.printSingleValue.fformat=a.format(".2f"),c.utils.add=function(a,b){if("string"==typeof b&&(b=b.replace("%","")),a instanceof Date){"string"==typeof b&&(b=+b);var c=new Date;return c.setTime(a.getTime()),c.setDate(a.getDate()+b),c}if("string"==typeof b){var d=+b/100;return a>0?a*(1+d):a*(1-d)}return a+b},c.utils.subtract=function(a,b){if("string"==typeof b&&(b=b.replace("%","")),a instanceof Date){"string"==typeof b&&(b=+b);var c=new Date;return c.setTime(a.getTime()),c.setDate(a.getDate()-b),c}if("string"==typeof b){var d=+b/100;return 0>a?a*(1+d):a*(1-d)}return a-b},c.utils.isNumber=function(a){return a===+a},c.utils.isFloat=function(a){return a===+a&&a!==(0|a)},c.utils.isInteger=function(a){return a===+a&&a===(0|a)},c.utils.isNegligible=function(a){return!c.utils.isNumber(a)||a-c.constants.NEGLIGIBLE_NUMBER},c.utils.clamp=function(a,b,c){return b>a?b:a>c?c:a};var d=0;return c.utils.uniqueId=function(){return++d},c.utils.nameToId=function(a){return a.toLowerCase().replace(/[\s]/g,"_").replace(/[\.']/g,"")},c.utils.appendOrSelect=function(a,b,c){c=c||b;var d=a.select(b);return d.empty()&&(d=a.append(c)),d},c.utils.safeNumber=function(a){return c.utils.isNumber(+a)?+a:0},c.logger={},c.logger.enableDebugLog=!1,c.logger.warn=function(a){return console&&(console.warn?console.warn(a):console.log&&console.log(a)),c.logger},c.logger.debug=function(a){return c.logger.enableDebugLog&&console&&(console.debug?console.debug(a):console.log&&console.log(a)),c.logger},c.logger.deprecate=function(a,b){function d(){return e||(c.logger.warn(b),e=!0),a.apply(this,arguments)}var e=!1;return d},c.events={current:null},c.events.trigger=function(a,b){return b?(c.events.current=a,void setTimeout(function(){a===c.events.current&&a()},b)):void a()},c.filters={},c.filters.RangedFilter=function(a,b){var c=new Array(a,b);return c.isFiltered=function(a){return a>=this[0]&&a=b[0][0]&&c=b[0][1]&&dq?b:q},s=r,t=200,u=function(a){var b=a&&a.getBoundingClientRect&&a.getBoundingClientRect().height;return b&&b>t?b:t},v=u,w=c.pluck("key"),x=c.pluck("value"),y=c.pluck("key"),z=c.pluck("key"),A=!1,B=function(a){return d.keyAccessor()(a)+": "+d.valueAccessor()(a)},C=!0,D=!0,E=750,F=c.printers.filters,G=["dimension","group"],H=c.constants.DEFAULT_CHART_GROUP,I=a.dispatch("preRender","postRender","preRedraw","postRedraw","filtered","zoomed","renderlet","pretransition"),J=[],K=function(a,b){return 0===b.length?a.filter(null):1!==b.length||b[0].isFiltered?1===b.length&&"RangedFilter"===b[0].filterType?a.filterRange(b[0]):a.filterFunction(function(a){for(var c=0;c=d&&d>=a)return!0}return!1}):a.filterExact(b[0]),b},L=function(a){return a.all()};d.height=function(b){return arguments.length?(v=a.functor(b||u),d):v(l.node())},d.width=function(b){return arguments.length?(s=a.functor(b||r),d):s(l.node())},d.minWidth=function(a){return arguments.length?(q=a,d):q},d.minHeight=function(a){return arguments.length?(t=a,d):t},d.dimension=function(a){return arguments.length?(i=a,d.expireCache(),d):i},d.data=function(b){return arguments.length?(L=a.functor(b),d.expireCache(),d):L.call(d,j)},d.group=function(a,b){return arguments.length?(j=a,d._groupName=b,d.expireCache(),d):j},d.ordering=function(a){return arguments.length?(z=a,o=b.quicksort.by(z),d.expireCache(),d):z},d._computeOrderedGroups=function(a){var c=a.slice(0);return c.length<=1?c:(o||(o=b.quicksort.by(z)),o(c,0,c.length))},d.filterAll=function(){return d.filter(null)},d.select=function(a){return l.select(a)},d.selectAll=function(a){return l?l.selectAll(a):null},d.anchor=function(b,e){if(!arguments.length)return k;if(c.instanceOfChart(b))k=b.anchor(),l=b.root(),n=!0;else{if(!b)throw new c.errors.BadArgumentException("parent must be defined");k=b.select&&b.classed?b.node():b,l=a.select(k),l.classed(c.constants.CHART_CLASS,!0),c.registerChart(d,e),n=!1}return H=e,d},d.anchorName=function(){var a=d.anchor();return a&&a.id?a.id:a&&a.replace?a.replace("#",""):"dc-chart"+d.chartID()},d.root=function(a){return arguments.length?(l=a,d):l},d.svg=function(a){return arguments.length?(m=a,d):m},d.resetSvg=function(){return d.select("svg").remove(),f()},d.filterPrinter=function(a){return arguments.length?(F=a,d):F},d.controlsUseVisibility=function(a){return arguments.length?(D=a,d):D},d.turnOnControls=function(){if(l){var a=d.controlsUseVisibility()?"visibility":"display";d.selectAll(".reset").style(a,null),d.selectAll(".filter").text(F(d.filters())).style(a,null)}return d},d.turnOffControls=function(){if(l){var a=d.controlsUseVisibility()?"visibility":"display",b=d.controlsUseVisibility()?"hidden":"none";d.selectAll(".reset").style(a,b),d.selectAll(".filter").style(a,b).text(d.filter())}return d},d.transitionDuration=function(a){return arguments.length?(E=a,d):E},d._mandatoryAttributes=function(a){return arguments.length?(G=a,d):G},d.render=function(){I.preRender(d),G&&G.forEach(g);var a=d._doRender();return p&&p.render(),d._activateRenderlets("postRender"),a},d._activateRenderlets=function(a){I.pretransition(d),d.transitionDuration()>0&&m?m.transition().duration(d.transitionDuration()).each("end",function(){I.renderlet(d),a&&I[a](d)}):(I.renderlet(d),a&&I[a](d))},d.redraw=function(){e(),I.preRedraw(d);var a=d._doRedraw();return p&&p.render(),d._activateRenderlets("postRedraw"),a},d.redrawGroup=function(){c.redrawAll(d.chartGroup())},d.renderGroup=function(){c.renderAll(d.chartGroup())},d._invokeFilteredListener=function(a){void 0!==a&&I.filtered(d,a)},d._invokeZoomedListener=function(){I.zoomed(d)};var M=function(a,b){return null===b||"undefined"==typeof b?a.length>0:a.some(function(a){return a>=b&&b>=a})};d.hasFilterHandler=function(a){return arguments.length?(M=a,d):M},d.hasFilter=function(a){return M(J,a)};var N=function(a,b){for(var c=0;c=b){a.splice(c,1);break}return a};d.removeFilterHandler=function(a){return arguments.length?(N=a,d):N};var O=function(a,b){return a.push(b),a};d.addFilterHandler=function(a){return arguments.length?(O=a,d):O};var P=function(a){return[]};return d.resetFilterHandler=function(a){return arguments.length?(P=a,d):P},d.replaceFilter=function(a){J=[],d.filter(a)},d.filter=function(a){return arguments.length?(a instanceof Array&&a[0]instanceof Array&&!a.isFiltered?a[0].forEach(function(a){d.hasFilter(a)?N(J,a):O(J,a)}):null===a?J=P(J):d.hasFilter(a)?N(J,a):O(J,a),h(),d._invokeFilteredListener(a),null!==l&&d.hasFilter()?d.turnOnControls():d.turnOffControls(),d):J.length>0?J[0]:null},d.filters=function(){return J},d.highlightSelected=function(b){a.select(b).classed(c.constants.SELECTED_CLASS,!0),a.select(b).classed(c.constants.DESELECTED_CLASS,!1)},d.fadeDeselected=function(b){a.select(b).classed(c.constants.SELECTED_CLASS,!1),a.select(b).classed(c.constants.DESELECTED_CLASS,!0)},d.resetHighlight=function(b){a.select(b).classed(c.constants.SELECTED_CLASS,!1),a.select(b).classed(c.constants.DESELECTED_CLASS,!1)},d.onClick=function(a){var b=d.keyAccessor()(a);c.events.trigger(function(){d.filter(b),d.redrawGroup()})},d.filterHandler=function(a){return arguments.length?(K=a,d):K},d._doRender=function(){return d},d._doRedraw=function(){return d},d.legendables=function(){return[]},d.legendHighlight=function(){},d.legendReset=function(){},d.legendToggle=function(){},d.isLegendableHidden=function(){return!1},d.keyAccessor=function(a){return arguments.length?(w=a,d):w},d.valueAccessor=function(a){return arguments.length?(x=a,d):x},d.label=function(a){return arguments.length?(y=a,A=!0,d):y},d.renderLabel=function(a){return arguments.length?(A=a,d):A},d.title=function(a){return arguments.length?(B=a,d):B},d.renderTitle=function(a){return arguments.length?(C=a,d):C},d.renderlet=c.logger.deprecate(function(a){return d.on("renderlet."+c.utils.uniqueId(),a),d},'chart.renderlet has been deprecated. Please use chart.on("renderlet.", renderletFunction)'),d.chartGroup=function(a){return arguments.length?(n||c.deregisterChart(d,H),H=a,n||c.registerChart(d,H),d):H},d.expireCache=function(){return d},d.legend=function(a){return arguments.length?(p=a,p.parent(d),d):p},d.chartID=function(){return d.__dcFlag__},d.options=function(a){var b=["anchor","group","xAxisLabel","yAxisLabel","stack","title","point","getColor","overlayGeoJson"];for(var e in a)"function"==typeof d[e]?a[e]instanceof Array&&-1!==b.indexOf(e)?d[e].apply(d,a[e]):d[e].call(d,a[e]):c.logger.debug("Not a valid option setter name: "+e);return d},d.on=function(a,b){return I.on(a,b),d},d},c.marginMixin=function(a){var b={top:10,right:50,bottom:30,left:30};return a.margins=function(c){return arguments.length?(b=c,a):b},a.effectiveWidth=function(){return a.width()-a.margins().left-a.margins().right},a.effectiveHeight=function(){return a.height()-a.margins().top-a.margins().bottom},a},c.colorMixin=function(b){var c=a.scale.category20c(),d=!0,e=function(a){return b.keyAccessor()(a)};return b.colors=function(d){return arguments.length?(c=d instanceof Array?a.scale.quantize().range(d):a.functor(d),b):c},b.ordinalColors=function(c){return b.colors(a.scale.ordinal().range(c))},b.linearColors=function(c){return b.colors(a.scale.linear().range(c).interpolate(a.interpolateHcl))},b.colorAccessor=function(a){return arguments.length?(e=a,d=!1,b):e},b.defaultColorAccessor=function(){return d},b.colorDomain=function(a){return arguments.length?(c.domain(a),b):c.domain()},b.calculateColorDomain=function(){var d=[a.min(b.data(),b.colorAccessor()),a.max(b.data(),b.colorAccessor())];return c.domain(d),b},b.getColor=function(a,b){return c(e.call(this,a,b))},b.colorCalculator=function(a){return arguments.length?(b.getColor=a,b):b.getColor},b},c.coordinateGridMixin=function(b){function d(){V=!0,Y&&(b.x().domain(m(b.x().domain(),z)),G&&b.x().domain(m(b.x().domain(),G.x().domain())));var a=b.x().domain(),d=c.filters.RangedFilter(a[0],a[1]);b.replaceFilter(d),b.rescale(),b.redraw(),G&&!n(b.filter(),G.filter())&&c.events.trigger(function(){G.replaceFilter(d),G.redraw()}),b._invokeZoomedListener(),c.events.trigger(function(){b.redrawGroup()},c.constants.EVENT_DELAY),V=!n(a,z)}function e(a,b){return!a||!b||a.length!==b.length||a.some(function(a,c){return a.toString()!==b[c].toString()})}function f(a,c){b.isOrdinal()?(b.elasticX()||0===y.domain().length)&&y.domain(b._ordinalXDomain()):b.elasticX()&&y.domain([b.xAxisMin(),b.xAxisMax()]);var d=y.domain();(c||e(B,d))&&b.rescale(),B=d,b.isOrdinal()?y.rangeBands([0,b.xAxisLength()],da,b._useOuterPadding()?ca:0):y.range([0,b.xAxisLength()]),I=I.scale(b.x()),g(a)}function g(a){var d=a.selectAll("g."+r);if(U){d.empty()&&(d=a.insert("g",":first-child").attr("class",p+" "+r).attr("transform","translate("+b.margins().left+","+b.margins().top+")"));var e=I.tickValues()?I.tickValues():"function"==typeof y.ticks?y.ticks(I.ticks()[0]):y.domain(),f=d.selectAll("line").data(e),g=f.enter().append("line").attr("x1",function(a){return y(a)}).attr("y1",b._xAxisY()-b.margins().top).attr("x2",function(a){return y(a)}).attr("y2",0).attr("opacity",0);c.transition(g,b.transitionDuration()).attr("opacity",1),c.transition(f,b.transitionDuration()).attr("x1",function(a){return y(a)}).attr("y1",b._xAxisY()-b.margins().top).attr("x2",function(a){return y(a)}).attr("y2",0),f.exit().remove()}else d.selectAll("line").remove()}function h(){return b._xAxisY()-b.margins().top}function i(){return b.anchorName().replace(/[ .#=\[\]]/g,"-")+"-clip"}function j(){var a=c.utils.appendOrSelect(v,"defs"),d=i(),e=c.utils.appendOrSelect(a,"#"+d,"clipPath").attr("id",d),f=2*ba;c.utils.appendOrSelect(e,"rect").attr("width",b.xAxisLength()+f).attr("height",b.yAxisHeight()+f).attr("transform","translate(-"+ba+", -"+ba+")")}function k(a){b.isOrdinal()&&(S=!1),f(b.g(),a),b._prepareYAxis(b.g()),b.plotData(),(b.elasticX()||W||a)&&b.renderXAxis(b.g()),(b.elasticY()||W||a)&&b.renderYAxis(b.g()),a?b.renderBrush(b.g(),!1):b.redrawBrush(b.g(),W),b.fadeDeselectedArea(),W=!1}function l(){aa?b._enableMouseZoom():_&&b._disableMouseZoom()}function m(b,c){var d=[];return d[0]=a.max([b[0],c[0]]),d[1]=a.min([b[1],c[1]]),d}function n(a,b){return a||b?a&&b?0===a.length&&0===b.length?!0:a[0].valueOf()===b[0].valueOf()&&a[1].valueOf()===b[1].valueOf()?!0:!1:!1:!0}function o(a){return a instanceof Array&&a.length>1}var p="grid-line",q="horizontal",r="vertical",s="y-axis-label",t="x-axis-label",u=12;b=c.colorMixin(c.marginMixin(c.baseMixin(b))),b.colors(a.scale.category10()),b._mandatoryAttributes().push("x");var v,w,x,y,z,A,B,C,D,E,F,G,H,I=a.svg.axis().orient("bottom"),J=c.units.integers,K=0,L=!1,M=0,N=a.svg.axis().orient("left"),O=0,P=!1,Q=0,R=a.svg.brush(),S=!0,T=!1,U=!1,V=!1,W=!1,X=[1,1/0],Y=!0,Z=a.behavior.zoom().on("zoom",d),$=a.behavior.zoom().on("zoom",null),_=!1,aa=!1,ba=0,ca=.5,da=0,ea=!1;return b.rescale=function(){return F=void 0,W=!0,b},b.rangeChart=function(a){return arguments.length?(G=a,G.focusChart(b),b):G},b.zoomScale=function(a){return arguments.length?(X=a,b):X},b.zoomOutRestrict=function(a){return arguments.length?(X[0]=a?1:0,Y=a,b):Y},b._generateG=function(a){return v=void 0===a?b.svg():a,w=v.append("g"),x=w.append("g").attr("class","chart-body").attr("transform","translate("+b.margins().left+", "+b.margins().top+")").attr("clip-path","url(#"+i()+")"),w},b.g=function(a){return arguments.length?(w=a,b):w},b.mouseZoomable=function(a){return arguments.length?(aa=a,b):aa},b.chartBodyG=function(a){return arguments.length?(x=a,b):x},b.x=function(a){return arguments.length?(y=a,z=y.domain(),b.rescale(),b):y},b.xOriginalDomain=function(){return z},b.xUnits=function(a){return arguments.length?(J=a,b):J},b.xAxis=function(a){return arguments.length?(I=a,b):I},b.elasticX=function(a){return arguments.length?(L=a,b):L},b.xAxisPadding=function(a){return arguments.length?(K=a,b):K},b.xUnitCount=function(){if(void 0===F){var a=b.xUnits()(b.x().domain()[0],b.x().domain()[1],b.x().domain());F=a instanceof Array?a.length:a}return F},b.useRightYAxis=function(a){return arguments.length?(ea=a,b):ea},b.isOrdinal=function(){return b.xUnits()===c.units.ordinal},b._useOuterPadding=function(){return!0},b._ordinalXDomain=function(){var a=b._computeOrderedGroups(b.data());return a.map(b.keyAccessor())},b.renderXAxis=function(a){var d=a.selectAll("g.x");d.empty()&&(d=a.append("g").attr("class","axis x").attr("transform","translate("+b.margins().left+","+b._xAxisY()+")"));var e=a.selectAll("text."+t);e.empty()&&b.xAxisLabel()&&(e=a.append("text").attr("class",t).attr("transform","translate("+(b.margins().left+b.xAxisLength()/2)+","+(b.height()-M)+")").attr("text-anchor","middle")),b.xAxisLabel()&&e.text()!==b.xAxisLabel()&&e.text(b.xAxisLabel()),c.transition(d,b.transitionDuration()).attr("transform","translate("+b.margins().left+","+b._xAxisY()+")").call(I),c.transition(e,b.transitionDuration()).attr("transform","translate("+(b.margins().left+b.xAxisLength()/2)+","+(b.height()-M)+")")},b._xAxisY=function(){return b.height()-b.margins().bottom},b.xAxisLength=function(){return b.effectiveWidth()},b.xAxisLabel=function(a,c){return arguments.length?(A=a,b.margins().bottom-=M,M=void 0===c?u:c,b.margins().bottom+=M,b):A},b._prepareYAxis=function(c){if(void 0===C||b.elasticY()){void 0===C&&(C=a.scale.linear());var d=b.yAxisMin()||0,e=b.yAxisMax()||0;C.domain([d,e]).rangeRound([b.yAxisHeight(),0])}C.range([b.yAxisHeight(),0]),N=N.scale(C),ea&&N.orient("right"),b._renderHorizontalGridLinesForAxis(c,C,N)},b.renderYAxisLabel=function(a,d,e,f){f=f||Q;var g=b.g().selectAll("text."+s+"."+a+"-label"),h=b.margins().top+b.yAxisHeight()/2;g.empty()&&d&&(g=b.g().append("text").attr("transform","translate("+f+","+h+"),rotate("+e+")").attr("class",s+" "+a+"-label").attr("text-anchor","middle").text(d)),d&&g.text()!==d&&g.text(d),c.transition(g,b.transitionDuration()).attr("transform","translate("+f+","+h+"),rotate("+e+")")},b.renderYAxisAt=function(a,d,e){var f=b.g().selectAll("g."+a);f.empty()&&(f=b.g().append("g").attr("class","axis "+a).attr("transform","translate("+e+","+b.margins().top+")")),c.transition(f,b.transitionDuration()).attr("transform","translate("+e+","+b.margins().top+")").call(d)},b.renderYAxis=function(){var a=ea?b.width()-b.margins().right:b._yAxisX();b.renderYAxisAt("y",N,a);var c=ea?b.width()-Q:Q,d=ea?90:-90;b.renderYAxisLabel("y",b.yAxisLabel(),d,c)},b._renderHorizontalGridLinesForAxis=function(a,d,e){var f=a.selectAll("g."+q);if(T){var g=e.tickValues()?e.tickValues():d.ticks(e.ticks()[0]);f.empty()&&(f=a.insert("g",":first-child").attr("class",p+" "+q).attr("transform","translate("+b.margins().left+","+b.margins().top+")"));var h=f.selectAll("line").data(g),i=h.enter().append("line").attr("x1",1).attr("y1",function(a){return d(a)}).attr("x2",b.xAxisLength()).attr("y2",function(a){return d(a)}).attr("opacity",0);c.transition(i,b.transitionDuration()).attr("opacity",1),c.transition(h,b.transitionDuration()).attr("x1",1).attr("y1",function(a){return d(a)}).attr("x2",b.xAxisLength()).attr("y2",function(a){return d(a)}),h.exit().remove()}else f.selectAll("line").remove()},b._yAxisX=function(){return b.useRightYAxis()?b.width()-b.margins().right:b.margins().left},b.yAxisLabel=function(a,c){return arguments.length?(D=a,b.margins().left-=Q,Q=void 0===c?u:c,b.margins().left+=Q,b):D},b.y=function(a){return arguments.length?(C=a,b.rescale(),b):C},b.yAxis=function(a){return arguments.length?(N=a,b):N},b.elasticY=function(a){return arguments.length?(P=a,b):P},b.renderHorizontalGridLines=function(a){return arguments.length?(T=a,b):T},b.renderVerticalGridLines=function(a){return arguments.length?(U=a,b):U},b.xAxisMin=function(){var d=a.min(b.data(),function(a){return b.keyAccessor()(a)});return c.utils.subtract(d,K)},b.xAxisMax=function(){var d=a.max(b.data(),function(a){return b.keyAccessor()(a)});return c.utils.add(d,K)},b.yAxisMin=function(){var d=a.min(b.data(),function(a){return b.valueAccessor()(a)});return c.utils.subtract(d,O)},b.yAxisMax=function(){var d=a.max(b.data(),function(a){return b.valueAccessor()(a)});return c.utils.add(d,O)},b.yAxisPadding=function(a){return arguments.length?(O=a,b):O},b.yAxisHeight=function(){return b.effectiveHeight()},b.round=function(a){return arguments.length?(E=a,b):E},b._rangeBandPadding=function(a){return arguments.length?(da=a,b):da},b._outerRangeBandPadding=function(a){return arguments.length?(ca=a,b):ca},c.override(b,"filter",function(a){return arguments.length?(b._filter(a),a?b.brush().extent(a):b.brush().clear(),b):b._filter()}),b.brush=function(a){return arguments.length?(R=a,b):R},b.renderBrush=function(a){if(S){R.on("brush",b._brushing),R.on("brushstart",b._disableMouseZoom),R.on("brushend",l);var c=a.append("g").attr("class","brush").attr("transform","translate("+b.margins().left+","+b.margins().top+")").call(R.x(b.x()));b.setBrushY(c,!1),b.setHandlePaths(c),b.hasFilter()&&b.redrawBrush(a,!1)}},b.setHandlePaths=function(a){a.selectAll(".resize").append("path").attr("d",b.resizeHandlePath)},b.setBrushY=function(a){a.selectAll(".brush rect").attr("height",h()),a.selectAll(".resize path").attr("d",b.resizeHandlePath)},b.extendBrush=function(){var a=R.extent();return b.round()&&(a[0]=a.map(b.round())[0],a[1]=a.map(b.round())[1],w.select(".brush").call(R.extent(a))),a},b.brushIsEmpty=function(a){return R.empty()||!a||a[1]<=a[0]},b._brushing=function(){var a=b.extendBrush();if(b.redrawBrush(w,!1),b.brushIsEmpty(a))c.events.trigger(function(){b.filter(null),b.redrawGroup()},c.constants.EVENT_DELAY);else{var d=c.filters.RangedFilter(a[0],a[1]);c.events.trigger(function(){b.replaceFilter(d),b.redrawGroup()},c.constants.EVENT_DELAY)}},b.redrawBrush=function(a,d){if(S){b.filter()&&b.brush().empty()&&b.brush().extent(b.filter());var e=c.optionalTransition(d,b.transitionDuration())(a.select("g.brush"));b.setBrushY(e),e.call(b.brush().x(b.x()).extent(b.brush().extent()))}b.fadeDeselectedArea()},b.fadeDeselectedArea=function(){},b.resizeHandlePath=function(a){var b=+("e"===a),c=b?1:-1,d=h()/3;return"M"+.5*c+","+d+"A6,6 0 0 "+b+" "+6.5*c+","+(d+6)+"V"+(2*d-6)+"A6,6 0 0 "+b+" "+.5*c+","+2*d+"ZM"+2.5*c+","+(d+8)+"V"+(2*d-8)+"M"+4.5*c+","+(d+8)+"V"+(2*d-8)},b.clipPadding=function(a){return arguments.length?(ba=a,b):ba},b._preprocessData=function(){},b._doRender=function(){return b.resetSvg(),b._preprocessData(),b._generateG(),j(),k(!0),l(),b},b._doRedraw=function(){return b._preprocessData(),k(!1),j(),b},b._enableMouseZoom=function(){_=!0,Z.x(b.x()).scaleExtent(X).size([b.width(),b.height()]).duration(b.transitionDuration()),b.root().call(Z)},b._disableMouseZoom=function(){b.root().call($)},b.focus=function(a){o(a)?b.x().domain(a):b.x().domain(z),Z.x(b.x()),d()},b.refocused=function(){return V},b.focusChart=function(a){return arguments.length?(H=a,b.on("filtered",function(a){a.filter()?n(a.filter(),H.filter())||c.events.trigger(function(){H.focus(a.filter())}):c.events.trigger(function(){H.x().domain(H.xOriginalDomain())})}),b):H},b.brushOn=function(a){return arguments.length?(S=a,b):S},b},c.stackMixin=function(b){function d(a,c){var d=a.accessor||b.valueAccessor();return a.name=String(a.name||c),a.values=a.group.all().map(function(c,e){return{x:b.keyAccessor()(c,e),y:a.hidden?null:d(c,e),data:c,layer:a.name,hidden:a.hidden}}),a.values=a.values.filter(e()),a.values}function e(){if(!b.x())return a.functor(!0);var c=b.x().domain();return b.isOrdinal()?function(){return!0}:b.elasticX()?function(){return!0}:function(a){return a.x>=c[0]&&a.x<=c[c.length-1]}}function f(a){var b=j.map(c.pluck("name")).indexOf(a);return j[b]}function g(){var a=b.data().map(function(a){return a.values});return Array.prototype.concat.apply([],a)}function h(a){return!a.hidden}var i=a.layout.stack().values(d),j=[],k={},l=!1;return b.stack=function(a,c,d){if(!arguments.length)return j;arguments.length<=2&&(d=c);var e={group:a};return"string"==typeof c&&(e.name=c),"function"==typeof d&&(e.accessor=d),j.push(e),b},c.override(b,"group",function(a,c,d){return arguments.length?(j=[],k={},b.stack(a,c),d&&b.valueAccessor(d),b._group(a,c)):b._group()}),b.hidableStacks=function(a){return arguments.length?(l=a,b):l},b.hideStack=function(a){var c=f(a);return c&&(c.hidden=!0),b},b.showStack=function(a){var c=f(a);return c&&(c.hidden=!1),b},b.getValueAccessorByIndex=function(a){return j[a].accessor||b.valueAccessor()},b.yAxisMin=function(){var d=a.min(g(),function(a){return a.y+a.y0d?c.concat([{others:k,key:e,value:g-d}]):c};return b.cappedKeyAccessor=function(a,c){return a.others?a.key:b.keyAccessor()(a,c)},b.cappedValueAccessor=function(a,c){return a.others?a.value:b.valueAccessor()(a,c)},b.data(function(a){if(d===1/0)return b._computeOrderedGroups(a.all());var c=a.top(d);return c=b._computeOrderedGroups(c),f?f(c):c}),b.cap=function(a){return arguments.length?(d=a,b):d},b.othersLabel=function(a){return arguments.length?(e=a,b):e},b.othersGrouper=function(a){return arguments.length?(f=a,b):f},c.override(b,"onClick",function(a){a.others&&b.filter([a.others]),b._onClick(a)}),b},c.bubbleMixin=function(b){var d=.3,e=10;b.BUBBLE_NODE_CLASS="node",b.BUBBLE_CLASS="bubble",b.MIN_RADIUS=10,b=c.colorMixin(b),b.renderLabel(!0),b.data(function(a){return a.top(1/0)});var f=a.scale.linear().domain([0,100]),g=function(a){return a.r};b.r=function(a){return arguments.length?(f=a,b):f},b.radiusValueAccessor=function(a){return arguments.length?(g=a,b):g},b.rMin=function(){var c=a.min(b.data(),function(a){return b.radiusValueAccessor()(a)});return c},b.rMax=function(){var c=a.max(b.data(),function(a){return b.radiusValueAccessor()(a)});return c},b.bubbleR=function(a){var c=b.radiusValueAccessor()(a),d=b.r()(c);return(isNaN(d)||0>=c)&&(d=0),d};var h=function(a){return b.label()(a)},i=function(a){return b.bubbleR(a)>e?1:0};b._doRenderLabel=function(a){if(b.renderLabel()){var d=a.select("text");d.empty()&&(d=a.append("text").attr("text-anchor","middle").attr("dy",".3em").on("click",b.onClick)),d.attr("opacity",0).text(h),c.transition(d,b.transitionDuration()).attr("opacity",i)}},b.doUpdateLabels=function(a){if(b.renderLabel()){var d=a.selectAll("text").text(h);c.transition(d,b.transitionDuration()).attr("opacity",i)}};var j=function(a){return b.title()(a)};return b._doRenderTitles=function(a){if(b.renderTitle()){var c=a.select("title");c.empty()&&a.append("title").text(j)}},b.doUpdateTitles=function(a){b.renderTitle()&&a.selectAll("title").text(j)},b.minRadius=function(a){return arguments.length?(b.MIN_RADIUS=a,b):b.MIN_RADIUS},b.minRadiusWithLabel=function(a){return arguments.length?(e=a,b):e},b.maxBubbleRelativeSize=function(a){return arguments.length?(d=a,b):d},b.fadeDeselectedArea=function(){b.hasFilter()?b.selectAll("g."+b.BUBBLE_NODE_CLASS).each(function(a){b.isSelectedNode(a)?b.highlightSelected(this):b.fadeDeselected(this)}):b.selectAll("g."+b.BUBBLE_NODE_CLASS).each(function(){b.resetHighlight(this)})},b.isSelectedNode=function(a){return b.hasFilter(a.key)},b.onClick=function(a){var d=a.key;c.events.trigger(function(){b.filter(d),b.redrawGroup()})},b},c.pieChart=function(b,d){function e(){D=E?E:a.min([Q.width(),Q.height()])/2;var b,d=r(),e=t();if(a.sum(Q.data(),Q.valueAccessor())?(b=e(Q.data()),F.classed(L,!1)):(b=e([{key:M,value:1,others:[M]}]),F.classed(L,!0)),F){var g=F.selectAll("g."+K).data(b);f(g,d,b),l(b,d),p(g),q(),c.transition(F,Q.transitionDuration()).attr("transform","translate("+Q.cx()+","+Q.cy()+")"); }}function f(a,b,c){var d=g(a);h(d,b),i(d),k(c,b)}function g(a){var b=a.enter().append("g").attr("class",function(a,b){return K+" _"+b});return b}function h(a,b){var d=a.append("path").attr("fill",y).on("click",z).attr("d",function(a,c){return A(a,c,b)});c.transition(d,Q.transitionDuration(),function(a){a.attrTween("d",w)})}function i(a){Q.renderTitle()&&a.append("title").text(function(a){return Q.title()(a.data)})}function j(a,b){c.transition(a,Q.transitionDuration()).attr("transform",function(a){return B(a,b)}).attr("text-anchor","middle").text(function(a){var b=a.data;return!v(b)&&!u(a)||s(a)?Q.label()(a.data):""})}function k(a,b){if(Q.renderLabel()){var c=F.selectAll("text."+K).data(a);c.exit().remove();var d=c.enter().append("text").attr("class",function(a,b){var c=K+" _"+b;return I&&(c+=" external"),c}).on("click",z);j(d,b)}}function l(a,b){m(a,b),n(a,b),o(a)}function m(a,b){var d=F.selectAll("g."+K).data(a).select("path").attr("d",function(a,c){return A(a,c,b)});c.transition(d,Q.transitionDuration(),function(a){a.attrTween("d",w)}).attr("fill",y)}function n(a,b){if(Q.renderLabel()){var c=F.selectAll("text."+K).data(a);j(c,b)}}function o(a){Q.renderTitle()&&F.selectAll("g."+K).data(a).select("title").text(function(a){return Q.title()(a.data)})}function p(a){a.exit().remove()}function q(){Q.hasFilter()?Q.selectAll("g."+K).each(function(a){s(a)?Q.highlightSelected(this):Q.fadeDeselected(this)}):Q.selectAll("g."+K).each(function(){Q.resetHighlight(this)})}function r(){return a.svg.arc().outerRadius(D-O).innerRadius(N)}function s(a){return Q.hasFilter(Q.cappedKeyAccessor(a.data))}function t(){return a.layout.pie().sort(null).value(Q.cappedValueAccessor)}function u(a){var b=a.endAngle-a.startAngle;return isNaN(b)||P>b}function v(a){return 0===Q.cappedValueAccessor(a)}function w(b){b.innerRadius=N;var c=this._current;x(c)&&(c={startAngle:0,endAngle:0});var d=a.interpolate(c,b);return this._current=d(0),function(a){return A(d(a),0,r())}}function x(a){return!a||isNaN(a.startAngle)||isNaN(a.endAngle)}function y(a,b){return Q.getColor(a.data,b)}function z(a,b){F.attr("class")!==L&&Q.onClick(a.data,b)}function A(a,b,c){var d=c(a,b);return d.indexOf("NaN")>=0&&(d="M0,0"),d}function B(b,c){var d;return d=I?a.svg.arc().outerRadius(D-O+I).innerRadius(D-O+I).centroid(b):c.centroid(b),isNaN(d[0])||isNaN(d[1])?"translate(0,0)":"translate("+d+")"}function C(b,c){Q.selectAll("g.pie-slice").each(function(d){b.name===d.data.key&&a.select(this).classed("highlight",c)})}var D,E,F,G,H,I,J=.5,K="pie-slice",L="empty-chart",M="empty",N=0,O=0,P=J,Q=c.capMixin(c.colorMixin(c.baseMixin({})));return Q.colorAccessor(Q.cappedKeyAccessor),Q.title(function(a){return Q.cappedKeyAccessor(a)+": "+Q.cappedValueAccessor(a)}),Q.slicesCap=Q.cap,Q.label(Q.cappedKeyAccessor),Q.renderLabel(!0),Q.transitionDuration(350),Q._doRender=function(){return Q.resetSvg(),F=Q.svg().append("g").attr("transform","translate("+Q.cx()+","+Q.cy()+")"),e(),Q},Q.externalRadiusPadding=function(a){return arguments.length?(O=a,Q):O},Q.innerRadius=function(a){return arguments.length?(N=a,Q):N},Q.radius=function(a){return arguments.length?(E=a,Q):E},Q.cx=function(a){return arguments.length?(G=a,Q):G||Q.width()/2},Q.cy=function(a){return arguments.length?(H=a,Q):H||Q.height()/2},Q._doRedraw=function(){return e(),Q},Q.minAngleForLabel=function(a){return arguments.length?(P=a,Q):P},Q.emptyTitle=function(a){return 0===arguments.length?M:(M=a,Q)},Q.externalLabels=function(a){return 0===arguments.length?I:(I=a?a:void 0,Q)},Q.legendables=function(){return Q.data().map(function(a,b){var c={name:a.key,data:a.value,others:a.others,chart:Q};return c.color=Q.getColor(a,b),c})},Q.legendHighlight=function(a){C(a,!0)},Q.legendReset=function(a){C(a,!1)},Q.legendToggle=function(a){Q.onClick({key:a.name,others:a.others})},Q.anchor(b,d)},c.barChart=function(b,d){function e(a){return c.utils.safeNumber(Math.abs(l.y()(a.y+a.y0)-l.y()(a.y0)))}function f(a,b,d){var f=a.selectAll("rect.bar").data(d.values,c.pluck("x")),g=f.enter().append("rect").attr("class","bar").attr("fill",c.pluck("data",l.getColor)).attr("y",l.yAxisHeight()).attr("height",0);l.renderTitle()&&g.append("title").text(c.pluck("data",l.title(d.name))),l.isOrdinal()&&f.on("click",l.onClick),c.transition(f,l.transitionDuration()).attr("x",function(a){var b=l.x()(a.x);return n&&(b-=i/2),l.isOrdinal()&&void 0!==m&&(b+=m/2),c.utils.safeNumber(b)}).attr("y",function(a){var b=l.y()(a.y+a.y0);return a.y<0&&(b-=e(a)),c.utils.safeNumber(b)}).attr("width",i).attr("height",function(a){return e(a)}).attr("fill",c.pluck("data",l.getColor)).select("title").text(c.pluck("data",l.title(d.name))),c.transition(f.exit(),l.transitionDuration()).attr("height",0).remove()}function g(){if(void 0===i){var a=l.xUnitCount();i=l.isOrdinal()&&void 0===m?Math.floor(l.x().rangeBand()):m?Math.floor((l.xAxisLength()-(a-1)*m)/a):Math.floor(l.xAxisLength()/(1+l.barPadding())/a),(i===1/0||isNaN(i)||j>i)&&(i=j)}}function h(b,c){return function(){var d=a.select(this),e=d.attr("fill")===b;return c?!e:e}}var i,j=1,k=2,l=c.stackMixin(c.coordinateGridMixin({})),m=k,n=!1,o=!1;return c.override(l,"rescale",function(){return l._rescale(),i=void 0,l}),c.override(l,"render",function(){return l.round()&&n&&!o&&c.logger.warn("By default, brush rounding is disabled if bars are centered. See dc.js bar chart API documentation for details."),l._render()}),l.plotData=function(){var b=l.chartBodyG().selectAll("g.stack").data(l.data());g(),b.enter().append("g").attr("class",function(a,b){return"stack _"+b}),b.each(function(b,c){var d=a.select(this);f(d,c,b)})},l.fadeDeselectedArea=function(){var a=l.chartBodyG().selectAll("rect.bar"),b=l.brush().extent();if(l.isOrdinal())l.hasFilter()?(a.classed(c.constants.SELECTED_CLASS,function(a){return l.hasFilter(a.x)}),a.classed(c.constants.DESELECTED_CLASS,function(a){return!l.hasFilter(a.x)})):(a.classed(c.constants.SELECTED_CLASS,!1),a.classed(c.constants.DESELECTED_CLASS,!1));else if(l.brushIsEmpty(b))a.classed(c.constants.DESELECTED_CLASS,!1);else{var d=b[0],e=b[1];a.classed(c.constants.DESELECTED_CLASS,function(a){return a.x=e})}},l.centerBar=function(a){return arguments.length?(n=a,l):n},c.override(l,"onClick",function(a){l._onClick(a.data)}),l.barPadding=function(a){return arguments.length?(l._rangeBandPadding(a),m=void 0,l):l._rangeBandPadding()},l._useOuterPadding=function(){return void 0===m},l.outerPadding=l._outerRangeBandPadding,l.gap=function(a){return arguments.length?(m=a,l):m},l.extendBrush=function(){var a=l.brush().extent();return!l.round()||n&&!o||(a[0]=a.map(l.round())[0],a[1]=a.map(l.round())[1],l.chartBodyG().select(".brush").call(l.brush().extent(a))),a},l.alwaysUseRounding=function(a){return arguments.length?(o=a,l):o},l.legendHighlight=function(a){l.isLegendableHidden(a)||l.g().selectAll("rect.bar").classed("highlight",h(a.color)).classed("fadeout",h(a.color,!0))},l.legendReset=function(){l.g().selectAll("rect.bar").classed("highlight",!1).classed("fadeout",!1)},c.override(l,"xAxisMax",function(){var a=this._xAxisMax();if("resolution"in l.xUnits()){var b=l.xUnits().resolution;a+=b}return a}),l.anchor(b,d)},c.lineChart=function(b,d){function e(a,b){return z.getColor.call(a,a.values,b)}function f(b,d){var f=a.svg.line().x(function(a){return z.x()(a.x)}).y(function(a){return z.y()(a.y+a.y0)}).interpolate(F).tension(G);r&&f.defined(r);var g=b.append("path").attr("class","line").attr("stroke",e);s&&g.attr("stroke-dasharray",s),c.transition(d.select("path.line"),z.transitionDuration()).attr("stroke",e).attr("d",function(a){return h(f(a.values))})}function g(b,d){if(A){var f=a.svg.area().x(function(a){return z.x()(a.x)}).y(function(a){return z.y()(a.y+a.y0)}).y0(function(a){return z.y()(a.y0)}).interpolate(F).tension(G);r&&f.defined(r),b.append("path").attr("class","area").attr("fill",e).attr("d",function(a){return h(f(a.values))}),c.transition(d.select("path.area"),z.transitionDuration()).attr("fill",e).attr("d",function(a){return h(f(a.values))})}}function h(a){return!a||a.indexOf("NaN")>=0?"M0,0":a}function i(b,d){if(!z.brushOn()&&z.xyTipsOn()){var e=u+"-list",f=b.select("g."+e);f.empty()&&(f=b.append("g").attr("class",e)),d.each(function(b,d){var e=b.values;r&&(e=e.filter(r));var g=f.select("g."+u+"._"+d);g.empty()&&(g=f.append("g").attr("class",u+" _"+d)),j(g);var h=g.selectAll("circle."+v).data(e,c.pluck("x"));h.enter().append("circle").attr("class",v).attr("r",m()).style("fill-opacity",D).style("stroke-opacity",E).on("mousemove",function(){var b=a.select(this);k(b),l(b,g)}).on("mouseout",function(){var b=a.select(this);n(b),o(g)}),h.attr("cx",function(a){return c.utils.safeNumber(z.x()(a.x))}).attr("cy",function(a){return c.utils.safeNumber(z.y()(a.y+a.y0))}).attr("fill",z.getColor).call(p,b),h.exit().remove()})}}function j(a){var b=a.select("path."+w).empty()?a.append("path").attr("class",w):a.select("path."+w);b.style("display","none").attr("stroke-dasharray","5,5");var c=a.select("path."+x).empty()?a.append("path").attr("class",x):a.select("path."+x);c.style("display","none").attr("stroke-dasharray","5,5")}function k(a){return a.style("fill-opacity",.8),a.style("stroke-opacity",.8),a.attr("r",B),a}function l(a,b){var c=a.attr("cx"),d=a.attr("cy"),e=z._yAxisX()-z.margins().left,f="M"+e+" "+d+"L"+c+" "+d,g="M"+c+" "+z.yAxisHeight()+"L"+c+" "+d;b.select("path."+w).style("display","").attr("d",f),b.select("path."+x).style("display","").attr("d",g)}function m(){return C||B}function n(a){a.style("fill-opacity",D).style("stroke-opacity",E).attr("r",m())}function o(a){a.select("path."+w).style("display","none"),a.select("path."+x).style("display","none")}function p(a,b){z.renderTitle()&&(a.selectAll("title").remove(),a.append("title").text(c.pluck("data",z.title(b.name))))}function q(b,c,d){return function(){var e=a.select(this),f=e.attr("stroke")===b&&e.attr("stroke-dasharray")===(c instanceof Array?c.join(","):null)||e.attr("fill")===b;return d?!f:f}}var r,s,t=5,u="dc-tooltip",v="dot",w="yRef",x="xRef",y=1e-6,z=c.stackMixin(c.coordinateGridMixin({})),A=!1,B=t,C=null,D=y,E=y,F="linear",G=.7,H=!0;return z.transitionDuration(500),z._rangeBandPadding(1),z.plotData=function(){var a=z.chartBodyG(),b=a.selectAll("g.stack-list");b.empty()&&(b=a.append("g").attr("class","stack-list"));var c=b.selectAll("g.stack").data(z.data()),d=c.enter().append("g").attr("class",function(a,b){return"stack _"+b});f(d,c),g(d,c),i(a,c)},z.interpolate=function(a){return arguments.length?(F=a,z):F},z.tension=function(a){return arguments.length?(G=a,z):G},z.defined=function(a){return arguments.length?(r=a,z):r},z.dashStyle=function(a){return arguments.length?(s=a,z):s},z.renderArea=function(a){return arguments.length?(A=a,z):A},z.xyTipsOn=function(a){return arguments.length?(H=a,z):H},z.dotRadius=function(a){return arguments.length?(B=a,z):B},z.renderDataPoints=function(a){return arguments.length?(a?(D=a.fillOpacity||.8,E=a.strokeOpacity||.8,C=a.radius||2):(D=y,E=y,C=null),z):{fillOpacity:D,strokeOpacity:E,radius:C}},z.legendHighlight=function(a){z.isLegendableHidden(a)||z.g().selectAll("path.line, path.area").classed("highlight",q(a.color,a.dashstyle)).classed("fadeout",q(a.color,a.dashstyle,!0))},z.legendReset=function(){z.g().selectAll("path.line, path.area").classed("highlight",!1).classed("fadeout",!1)},c.override(z,"legendables",function(){var a=z._legendables();return s?a.map(function(a){return a.dashstyle=s,a}):a}),z.anchor(b,d)},c.dataCount=function(b,d){var e=a.format(",d"),f=c.baseMixin({}),g={some:"",all:""};return f.html=function(a){return arguments.length?(a.all&&(g.all=a.all),a.some&&(g.some=a.some),f):g},f.formatNumber=function(a){return arguments.length?(e=a,f):e},f._doRender=function(){var a=f.dimension().size(),b=f.group().value(),c=e(a),d=e(b);return a===b&&""!==g.all?f.root().html(g.all.replace("%total-count",c).replace("%filter-count",d)):""!==g.some?f.root().html(g.some.replace("%total-count",c).replace("%filter-count",d)):(f.selectAll(".total-count").text(c),f.selectAll(".filter-count").text(d)),f},f._doRedraw=function(){return f._doRender()},f.anchor(b,d)},c.dataTable=function(b,d){function e(){var a=!0;if(o.forEach(function(b){a&="function"==typeof b}),!a){m.selectAll("th").remove();var b=m.root().selectAll("th").data(o),c=b.enter().append("th");c.attr("class",l).html(function(a){return m._doColumnHeaderFormat(a)})}var d=m.root().selectAll("tbody").data(f(),function(a){return m.keyAccessor()(a)}),e=d.enter().append("tbody");return r===!0&&e.append("tr").attr("class",k).append("td").attr("class",h).attr("colspan",o.length).html(function(a){return m.keyAccessor()(a)}),d.exit().remove(),e}function f(){var b;return b=q===a.ascending?m.dimension().bottom(n):m.dimension().top(n),a.nest().key(m.group()).sortKeys(q).entries(b.sort(function(a,b){return q(p(a),p(b))}))}function g(a){var b=a.order().selectAll("tr."+i).data(function(a){return a.values}),c=b.enter().append("tr").attr("class",i);return o.forEach(function(a,b){c.append("td").attr("class",j+" _"+b).html(function(b){return m._doColumnValueFormat(a,b)})}),b.exit().remove(),b}var h="dc-table-label",i="dc-table-row",j="dc-table-column",k="dc-table-group",l="dc-table-head",m=c.baseMixin({}),n=25,o=[],p=function(a){return a},q=a.ascending,r=!0;return m._doRender=function(){return m.selectAll("tbody").remove(),g(e()),m},m._doColumnValueFormat=function(a,b){return"function"==typeof a?a(b):"string"==typeof a?b[a]:a.format(b)},m._doColumnHeaderFormat=function(a){return"function"==typeof a?m._doColumnHeaderFnToString(a):"string"==typeof a?m._doColumnHeaderCapitalize(a):String(a.label)},m._doColumnHeaderCapitalize=function(a){return a.charAt(0).toUpperCase()+a.slice(1)},m._doColumnHeaderFnToString=function(a){var b=String(a),c=b.indexOf("return ");if(c>=0){var d=b.lastIndexOf(";");if(d>=0){b=b.substring(c+7,d);var e=b.indexOf("numberFormat");e>=0&&(b=b.replace("numberFormat",""))}}return b},m._doRedraw=function(){return m._doRender()},m.size=function(a){return arguments.length?(n=a,m):n},m.columns=function(a){return arguments.length?(o=a,m):o},m.sortBy=function(a){return arguments.length?(p=a,m):p},m.order=function(a){return arguments.length?(q=a,m):q},m.showGroups=function(a){return arguments.length?(r=a,m):r},m.anchor(b,d)},c.dataGrid=function(b,d){function e(){var a=m.root().selectAll("div."+l).data(f(),function(a){return m.keyAccessor()(a)}),b=a.enter().append("div").attr("class",l);return s&&b.html(function(a){return s(a)}),a.exit().remove(),b}function f(){var b=m.dimension().top(n);return a.nest().key(m.group()).sortKeys(q).entries(b.sort(function(a,b){return q(p(a),p(b))}).slice(r,h))}function g(a){var b=a.order().selectAll("div."+j).data(function(a){return a.values});return b.enter().append("div").attr("class",j).html(function(a){return o(a)}),b.exit().remove(),b}var h,i="dc-grid-label",j="dc-grid-item",k="dc-grid-group",l="dc-grid-top",m=c.baseMixin({}),n=999,o=function(a){return"you need to provide an html() handling param: "+JSON.stringify(a)},p=function(a){return a},q=a.ascending,r=0,s=function(a){return"

"+m.keyAccessor()(a)+"

"};return m._doRender=function(){return m.selectAll("div."+l).remove(),g(e()),m},m._doRedraw=function(){return m._doRender()},m.beginSlice=function(a){return arguments.length?(r=a,m):r},m.endSlice=function(a){return arguments.length?(h=a,m):h},m.size=function(a){return arguments.length?(n=a,m):n},m.html=function(a){return arguments.length?(o=a,m):o},m.htmlGroup=function(a){return arguments.length?(s=a,m):s},m.sortBy=function(a){return arguments.length?(p=a,m):p},m.order=function(a){return arguments.length?(q=a,m):q},m.anchor(b,d)},c.bubbleChart=function(a,b){function d(a){var b=a.enter().append("g");b.attr("class",i.BUBBLE_NODE_CLASS).attr("transform",k).append("circle").attr("class",function(a,b){return i.BUBBLE_CLASS+" _"+b}).on("click",i.onClick).attr("fill",i.getColor).attr("r",0),c.transition(a,i.transitionDuration()).selectAll("circle."+i.BUBBLE_CLASS).attr("r",function(a){return i.bubbleR(a)}).attr("opacity",function(a){return i.bubbleR(a)>0?1:0}),i._doRenderLabel(b),i._doRenderTitles(b)}function e(a){c.transition(a,i.transitionDuration()).attr("transform",k).selectAll("circle."+i.BUBBLE_CLASS).attr("fill",i.getColor).attr("r",function(a){return i.bubbleR(a)}).attr("opacity",function(a){return i.bubbleR(a)>0?1:0}),i.doUpdateLabels(a),i.doUpdateTitles(a)}function f(a){a.exit().remove()}function g(a){var b=i.x()(i.keyAccessor()(a));return isNaN(b)&&(b=0),b}function h(a){var b=i.y()(i.valueAccessor()(a));return isNaN(b)&&(b=0),b}var i=c.bubbleMixin(c.coordinateGridMixin({})),j=!1;i.transitionDuration(750);var k=function(a){return"translate("+g(a)+","+h(a)+")"};return i.elasticRadius=function(a){return arguments.length?(j=a,i):j},i.plotData=function(){j&&i.r().domain([i.rMin(),i.rMax()]),i.r().range([i.MIN_RADIUS,i.xAxisLength()*i.maxBubbleRelativeSize()]);var a=i.chartBodyG().selectAll("g."+i.BUBBLE_NODE_CLASS).data(i.data(),function(a){return a.key});d(a),e(a),f(a),i.fadeDeselectedArea()},i.renderBrush=function(){},i.redrawBrush=function(){i.fadeDeselectedArea()},i.anchor(a,b)},c.compositeChart=function(b,d){function e(){(void 0===u.rightY()||u.elasticY())&&(void 0===u.rightY()&&u.rightY(a.scale.linear()),u.rightY().domain([l(),o()]).rangeRound([u.yAxisHeight(),0])),u.rightY().range([u.yAxisHeight(),0]),u.rightYAxis(u.rightYAxis().scale(u.rightY())),u.rightYAxis().orient("right")}function f(){(void 0===u.y()||u.elasticY())&&(void 0===u.y()&&u.y(a.scale.linear()),u.y().domain([k(),n()]).rangeRound([u.yAxisHeight(),0])),u.y().range([u.yAxisHeight(),0]),u.yAxis(u.yAxis().scale(u.y())),u.yAxis().orient("left")}function g(a,b){a._generateG(u.g()),a.g().attr("class",s+" _"+b)}function h(){return v.filter(function(a){return!a.useRightYAxis()})}function i(){return v.filter(function(a){return a.useRightYAxis()})}function j(a){return a.map(function(a){return a.yAxisMin()})}function k(){return a.min(j(h()))}function l(){return a.min(j(i()))}function m(a){return a.map(function(a){return a.yAxisMax()})}function n(){return c.utils.add(a.max(m(h())),u.yAxisPadding())}function o(){return c.utils.add(a.max(m(i())),u.yAxisPadding())}function p(){return v.map(function(a){return a.xAxisMin()})}function q(){return v.map(function(a){return a.xAxisMax()})}var r,s="sub",t=12,u=c.coordinateGridMixin({}),v=[],w={},x=!1,y=!0,z=a.svg.axis(),A=0,B=t,C=!1;return u._mandatoryAttributes([]),u.transitionDuration(500),c.override(u,"_generateG",function(){for(var a=this.__generateG(),b=0;b0&&!C?u._renderHorizontalGridLinesForAxis(u.g(),u.y(),u.yAxis()):i().length>0&&u._renderHorizontalGridLinesForAxis(u.g(),r,z)},u.renderYAxis=function(){0!==h().length&&(u.renderYAxisAt("y",u.yAxis(),u.margins().left),u.renderYAxisLabel("y",u.yAxisLabel(),-90)),0!==i().length&&(u.renderYAxisAt("yr",u.rightYAxis(),u.width()-u.margins().right),u.renderYAxisLabel("yr",u.rightYAxisLabel(),90,u.width()-B))},u.plotData=function(){for(var a=0;a0&&(b[0]=0),t=a.scale.linear().domain(b).range([0,G.effectiveWidth()])}H.scale(t)}function f(){var a=s.select("g.axis");e(),a.empty()&&(a=s.append("g").attr("class","axis")),a.attr("transform","translate(0, "+G.effectiveHeight()+")"),c.transition(a,G.transitionDuration()).call(H)}function g(){s.selectAll("g.tick").select("line.grid-line").remove(),s.selectAll("g.tick").append("line").attr("class","grid-line").attr("x1",0).attr("y1",0).attr("x2",0).attr("y2",function(){return-G.effectiveHeight()})}function h(){v=G.data(),f(),g();var a=s.selectAll("g."+D).data(v);i(a),j(a),l(a)}function i(a){var b=a.enter().append("g").attr("class",function(a,b){return D+" _"+b});b.append("rect").attr("width",0),n(b),o(a)}function j(a){a.exit().remove()}function k(){var a=t(0);return a===-(1/0)||a!==a?t(1):a}function l(a){var b,d=v.length;b=C?C:(G.effectiveHeight()-(d+1)*B)/d,y||(x=b/2);var e=a.attr("transform",function(a,c){return"translate(0,"+((c+1)*B+c*b)+")"}).select("rect").attr("height",b).attr("fill",G.getColor).on("click",p).classed("deselected",function(a){return G.hasFilter()?!r(a):!1}).classed("selected",function(a){return G.hasFilter()?r(a):!1});c.transition(e,G.transitionDuration()).attr("width",function(a){return Math.abs(k()-t(G.valueAccessor()(a)))}).attr("transform",q),m(a),o(a)}function m(a){G.renderTitle()&&(a.selectAll("title").remove(),a.append("title").text(G.title()))}function n(a){G.renderLabel()&&a.append("text").on("click",p),G.renderTitleLabel()&&a.append("text").attr("class",E).on("click",p)}function o(a){if(G.renderLabel()){var b=a.select("text").attr("x",w).attr("y",x).attr("dy",z).on("click",p).attr("class",function(a,b){return D+" _"+b}).text(function(a){return G.label()(a)});c.transition(b,G.transitionDuration()).attr("transform",q)}if(G.renderTitleLabel()){var d=a.select("."+E).attr("x",G.effectiveWidth()-A).attr("y",x).attr("text-anchor","end").on("click",p).attr("class",function(a,b){return E+" _"+b}).text(function(a){return G.title()(a)});c.transition(d,G.transitionDuration()).attr("transform",q)}}function p(a){G.onClick(a)}function q(a){var b=t(G.cappedValueAccessor(a)),c=k(),d=b>c?c:b;return"translate("+d+",0)"}function r(a){return G.hasFilter(G.cappedKeyAccessor(a))}var s,t,u,v,w=10,x=15,y=!1,z="0.35em",A=2,B=5,C=!1,D="row",E="titlerow",F=!1,G=c.capMixin(c.marginMixin(c.colorMixin(c.baseMixin({})))),H=a.svg.axis().orient("bottom");return G.rowsCap=G.cap,G._doRender=function(){return G.resetSvg(),s=G.svg().append("g").attr("transform","translate("+G.margins().left+","+G.margins().top+")"),h(),G},G.title(function(a){return G.cappedKeyAccessor(a)+": "+G.cappedValueAccessor(a)}),G.label(G.cappedKeyAccessor),G.x=function(a){return arguments.length?(t=a,G):t},G.renderTitleLabel=function(a){return arguments.length?(F=a,G):F},G._doRedraw=function(){return h(),G},G.xAxis=function(){return H},G.fixedBarHeight=function(a){return arguments.length?(C=a,G):C},G.gap=function(a){return arguments.length?(B=a,G):B},G.elasticX=function(a){return arguments.length?(u=a,G):u},G.labelOffsetX=function(a){return arguments.length?(w=a,G):w},G.labelOffsetY=function(a){return arguments.length?(x=a,y=!0,G):x},G.titleLabelOffsetX=function(a){return arguments.length?(A=a,G):A},G.anchor(b,d)},c.legend=function(){function a(){return j+i}var b,d,e=2,f={},g=0,h=0,i=12,j=5,k=!1,l=560,m=70,n=!1;return f.parent=function(a){return arguments.length?(b=a,f):b},f.render=function(){b.svg().select("g.dc-legend").remove(),d=b.svg().append("g").attr("class","dc-legend").attr("transform","translate("+g+","+h+")");var f=b.legendables(),o=d.selectAll("g.dc-legend-item").data(f).enter().append("g").attr("class","dc-legend-item").on("mouseover",function(a){b.legendHighlight(a)}).on("mouseout",function(a){b.legendReset(a)}).on("click",function(a){a.chart.legendToggle(a)});d.selectAll("g.dc-legend-item").classed("fadeout",function(a){return a.chart.isLegendableHidden(a)}),f.some(c.pluck("dashstyle"))?o.append("line").attr("x1",0).attr("y1",i/2).attr("x2",i).attr("y2",i/2).attr("stroke-width",2).attr("stroke-dasharray",c.pluck("dashstyle")).attr("stroke",c.pluck("color")):o.append("rect").attr("width",i).attr("height",i).attr("fill",function(a){return a?a.color:"blue"}),o.append("text").text(c.pluck("name")).attr("x",i+e).attr("y",function(){return i/2+(this.clientHeight?this.clientHeight:13)/2-2});var p=0,q=0;o.attr("transform",function(b,c){if(k){var d="translate("+p+","+q*a()+")",e=n===!0?this.getBBox().width+j:m;return p+e>=l?(++q,p=0):p+=e,d}return"translate(0,"+c*a()+")"})},f.x=function(a){return arguments.length?(g=a,f):g},f.y=function(a){return arguments.length?(h=a,f):h},f.gap=function(a){return arguments.length?(j=a,f):j},f.itemHeight=function(a){return arguments.length?(i=a,f):i},f.horizontal=function(a){return arguments.length?(k=a,f):k},f.legendWidth=function(a){return arguments.length?(l=a,f):l},f.itemWidth=function(a){return arguments.length?(m=a,f):m},f.autoItemWidth=function(a){return arguments.length?(n=a,f):n},f},c.scatterPlot=function(b,d){function e(b,d){var e=g.selectAll(".chart-body path.symbol").filter(function(){return b(a.select(this))}),f=h.size();h.size(Math.pow(d,2)),c.transition(e,g.transitionDuration()).attr("d",h),h.size(f)}function f(a){var b=g.selectAll(".chart-body path.symbol").each(function(b){this.filtered=a&&a.isFiltered(b.key)});c.transition(b,g.transitionDuration()).attr("d",h)}var g=c.coordinateGridMixin({}),h=a.svg.symbol(),i=function(a){return a.value},j=g.keyAccessor();g.keyAccessor(function(a){return j(a)[0]}),g.valueAccessor(function(a){return j(a)[1]; -}),g.colorAccessor(function(){return g._groupName});var k=function(a){return"translate("+g.x()(g.keyAccessor()(a))+","+g.y()(g.valueAccessor()(a))+")"},l=3,m=5,n=0;return h.size(function(a){return i(a)?this.filtered?Math.pow(m,2):Math.pow(l,2):n}),c.override(g,"_filter",function(a){return arguments.length?g.__filter(c.filters.RangedTwoDimensionalFilter(a)):g.__filter()}),g.plotData=function(){var a=g.chartBodyG().selectAll("path.symbol").data(g.data());a.enter().append("path").attr("class","symbol").attr("opacity",0).attr("fill",g.getColor).attr("transform",k),c.transition(a,g.transitionDuration()).attr("opacity",function(a){return i(a)?1:0}).attr("fill",g.getColor).attr("transform",k).attr("d",h),c.transition(a.exit(),g.transitionDuration()).attr("opacity",0).remove()},g.existenceAccessor=function(a){return arguments.length?(i=a,this):i},g.symbol=function(a){return arguments.length?(h.type(a),g):h.type()},g.symbolSize=function(a){return arguments.length?(l=a,g):l},g.highlightedSize=function(a){return arguments.length?(m=a,g):m},g.hiddenSize=function(a){return arguments.length?(n=a,g):n},g.legendables=function(){return[{chart:g,name:g._groupName,color:g.getColor()}]},g.legendHighlight=function(b){e(function(a){return a.attr("fill")===b.color},m),g.selectAll(".chart-body path.symbol").filter(function(){return a.select(this).attr("fill")!==b.color}).classed("fadeout",!0)},g.legendReset=function(b){e(function(a){return a.attr("fill")===b.color},l),g.selectAll(".chart-body path.symbol").filter(function(){return a.select(this).attr("fill")!==b.color}).classed("fadeout",!1)},g.setHandlePaths=function(){},g.extendBrush=function(){var a=g.brush().extent();return g.round()&&(a[0]=a[0].map(g.round()),a[1]=a[1].map(g.round()),g.g().select(".brush").call(g.brush().extent(a))),a},g.brushIsEmpty=function(a){return g.brush().empty()||!a||a[0][0]>=a[1][0]||a[0][1]>=a[1][1]},g._brushing=function(){var a=g.extendBrush();if(g.redrawBrush(g.g()),g.brushIsEmpty(a))c.events.trigger(function(){g.filter(null),g.redrawGroup()}),f(!1);else{var b=c.filters.RangedTwoDimensionalFilter(a);c.events.trigger(function(){g.filter(null),g.filter(b),g.redrawGroup()},c.constants.EVENT_DELAY),f(b)}},g.setBrushY=function(a){a.call(g.brush().y(g.y()))},g.anchor(b,d)},c.numberDisplay=function(b,d){var e="number-display",f=a.format(".2s"),g=c.baseMixin({}),h={one:"",some:"",none:""};return g._mandatoryAttributes(["group"]),g.html=function(a){return arguments.length?(a.none?h.none=a.none:a.one?h.none=a.one:a.some&&(h.none=a.some),a.one?h.one=a.one:a.some&&(h.one=a.some),a.some?h.some=a.some:a.one&&(h.some=a.one),g):h},g.value=function(){return g.data()},g.data(function(a){var b=a.value?a.value():a.top(1)[0];return g.valueAccessor()(b)}),g.transitionDuration(250),g._doRender=function(){var b=g.value(),c=g.selectAll("."+e);c.empty()&&(c=c.data([0]).enter().append("span").attr("class",e)),c.transition().duration(g.transitionDuration()).ease("quad-out-in").tween("text",function(){var c=a.interpolateNumber(this.lastValue||0,b);return this.lastValue=b,function(a){var d=null,e=g.formatNumber()(c(a));0===b&&""!==h.none?d=h.none:1===b&&""!==h.one?d=h.one:""!==h.some&&(d=h.some),this.innerHTML=d?d.replace("%number",e):e}})},g._doRedraw=function(){return g._doRender()},g.formatNumber=function(a){return arguments.length?(f=a,g):f},g.anchor(b,d)},c.heatMap=function(b,d){function e(a,b){var d=p.selectAll(".box-group").filter(function(c){return c.key[a]===b}),e=d.filter(function(a){return!p.hasFilter(a.key)});c.events.trigger(function(){e.empty()?d.each(function(a){p.filter(a.key)}):e.each(function(a){p.filter(a.key)}),p.redrawGroup()})}var f,g,h,i=6.75,j=a.ascending,k=a.ascending,l=a.scale.ordinal(),m=a.scale.ordinal(),n=i,o=i,p=c.colorMixin(c.marginMixin(c.baseMixin({})));p._mandatoryAttributes(["group"]),p.title(p.colorAccessor());var q=function(a){return a},r=function(a){return a};p.colsLabel=function(a){return arguments.length?(q=a,p):q},p.rowsLabel=function(a){return arguments.length?(r=a,p):r};var s=function(a){e(0,a)},t=function(a){e(1,a)},u=function(a){var b=a.key;c.events.trigger(function(){p.filter(b),p.redrawGroup()})};return c.override(p,"filter",function(a){return arguments.length?p._filter(c.filters.TwoDimensionalFilter(a)):p._filter()}),p.rows=function(a){return arguments.length?(h=a,p):h},p.rowOrdering=function(a){return arguments.length?(k=a,p):k},p.cols=function(a){return arguments.length?(g=a,p):g},p.colOrdering=function(a){return arguments.length?(j=a,p):j},p._doRender=function(){return p.resetSvg(),f=p.svg().append("g").attr("class","heatmap").attr("transform","translate("+p.margins().left+","+p.margins().top+")"),p._doRedraw()},p._doRedraw=function(){var a=p.data(),b=p.rows()||a.map(p.valueAccessor()),d=p.cols()||a.map(p.keyAccessor());k&&(b=b.sort(k)),j&&(d=d.sort(j)),b=m.domain(b),d=l.domain(d);var e=b.domain().length,g=d.domain().length,h=Math.floor(p.effectiveWidth()/g),i=Math.floor(p.effectiveHeight()/e);d.rangeRoundBands([0,p.effectiveWidth()]),b.rangeRoundBands([p.effectiveHeight(),0]);var q=f.selectAll("g.box-group").data(p.data(),function(a,b){return p.keyAccessor()(a,b)+"\x00"+p.valueAccessor()(a,b)}),r=q.enter().append("g").attr("class","box-group");r.append("rect").attr("class","heat-box").attr("fill","white").on("click",p.boxOnClick()),p.renderTitle()&&(r.append("title"),q.selectAll("title").text(p.title())),c.transition(q.selectAll("rect"),p.transitionDuration()).attr("x",function(a,b){return d(p.keyAccessor()(a,b))}).attr("y",function(a,c){return b(p.valueAccessor()(a,c))}).attr("rx",n).attr("ry",o).attr("fill",p.getColor).attr("width",h).attr("height",i),q.exit().remove();var s=f.selectAll("g.cols");s.empty()&&(s=f.append("g").attr("class","cols axis"));var t=s.selectAll("text").data(d.domain());t.enter().append("text").attr("x",function(a){return d(a)+h/2}).style("text-anchor","middle").attr("y",p.effectiveHeight()).attr("dy",12).on("click",p.xAxisOnClick()).text(p.colsLabel()),c.transition(t,p.transitionDuration()).text(p.colsLabel()).attr("x",function(a){return d(a)+h/2}).attr("y",p.effectiveHeight()),t.exit().remove();var u=f.selectAll("g.rows");u.empty()&&(u=f.append("g").attr("class","rows axis"));var v=u.selectAll("text").data(b.domain());return v.enter().append("text").attr("dy",6).style("text-anchor","end").attr("x",0).attr("dx",-2).on("click",p.yAxisOnClick()).text(p.rowsLabel()),c.transition(v,p.transitionDuration()).text(p.rowsLabel()).attr("y",function(a){return b(a)+i/2}),v.exit().remove(),p.hasFilter()?p.selectAll("g.box-group").each(function(a){p.isSelectedNode(a)?p.highlightSelected(this):p.fadeDeselected(this)}):p.selectAll("g.box-group").each(function(){p.resetHighlight(this)}),p},p.boxOnClick=function(a){return arguments.length?(u=a,p):u},p.xAxisOnClick=function(a){return arguments.length?(s=a,p):s},p.yAxisOnClick=function(a){return arguments.length?(t=a,p):t},p.xBorderRadius=function(a){return arguments.length?(n=a,p):n},p.yBorderRadius=function(a){return arguments.length?(o=a,p):o},p.isSelectedNode=function(a){return p.hasFilter(a.key)},p.anchor(b,d)},function(){function b(a){return[0,a.length-1]}function c(b){return[a.quantile(b,.25),a.quantile(b,.5),a.quantile(b,.75)]}a.box=function(){function d(b){b.each(function(b,c){b=b.map(i).sort(a.ascending);var d=a.select(this),m=b.length,n=b[0],o=b[m-1],p=b.quartiles=k(b),q=j&&j.call(this,b,c),r=q&&q.map(function(a){return b[a]}),s=q?a.range(0,q[0]).concat(a.range(q[1]+1,m)):a.range(m),t=a.scale.linear().domain(h&&h.call(this,b,c)||[n,o]).range([f,0]),u=this.__chart__||a.scale.linear().domain([0,1/0]).range(t.range());this.__chart__=t;var v=d.selectAll("line.center").data(r?[r]:[]);v.enter().insert("line","rect").attr("class","center").attr("x1",e/2).attr("y1",function(a){return u(a[0])}).attr("x2",e/2).attr("y2",function(a){return u(a[1])}).style("opacity",1e-6).transition().duration(g).style("opacity",1).attr("y1",function(a){return t(a[0])}).attr("y2",function(a){return t(a[1])}),v.transition().duration(g).style("opacity",1).attr("y1",function(a){return t(a[0])}).attr("y2",function(a){return t(a[1])}),v.exit().transition().duration(g).style("opacity",1e-6).attr("y1",function(a){return t(a[0])}).attr("y2",function(a){return t(a[1])}).remove();var w=d.selectAll("rect.box").data([p]);w.enter().append("rect").attr("class","box").attr("x",0).attr("y",function(a){return u(a[2])}).attr("width",e).attr("height",function(a){return u(a[0])-u(a[2])}).transition().duration(g).attr("y",function(a){return t(a[2])}).attr("height",function(a){return t(a[0])-t(a[2])}),w.transition().duration(g).attr("y",function(a){return t(a[2])}).attr("height",function(a){return t(a[0])-t(a[2])});var x=d.selectAll("line.median").data([p[1]]);x.enter().append("line").attr("class","median").attr("x1",0).attr("y1",u).attr("x2",e).attr("y2",u).transition().duration(g).attr("y1",t).attr("y2",t),x.transition().duration(g).attr("y1",t).attr("y2",t);var y=d.selectAll("line.whisker").data(r||[]);y.enter().insert("line","circle, text").attr("class","whisker").attr("x1",0).attr("y1",u).attr("x2",e).attr("y2",u).style("opacity",1e-6).transition().duration(g).attr("y1",t).attr("y2",t).style("opacity",1),y.transition().duration(g).attr("y1",t).attr("y2",t).style("opacity",1),y.exit().transition().duration(g).attr("y1",t).attr("y2",t).style("opacity",1e-6).remove();var z=d.selectAll("circle.outlier").data(s,Number);z.enter().insert("circle","text").attr("class","outlier").attr("r",5).attr("cx",e/2).attr("cy",function(a){return u(b[a])}).style("opacity",1e-6).transition().duration(g).attr("cy",function(a){return t(b[a])}).style("opacity",1),z.transition().duration(g).attr("cy",function(a){return t(b[a])}).style("opacity",1),z.exit().transition().duration(g).attr("cy",function(a){return t(b[a])}).style("opacity",1e-6).remove();var A=l||t.tickFormat(8),B=d.selectAll("text.box").data(p);B.enter().append("text").attr("class","box").attr("dy",".3em").attr("dx",function(a,b){return 1&b?6:-6}).attr("x",function(a,b){return 1&b?e:0}).attr("y",u).attr("text-anchor",function(a,b){return 1&b?"start":"end"}).text(A).transition().duration(g).attr("y",t),B.transition().duration(g).text(A).attr("y",t);var C=d.selectAll("text.whisker").data(r||[]);C.enter().append("text").attr("class","whisker").attr("dy",".3em").attr("dx",6).attr("x",e).attr("y",u).text(A).style("opacity",1e-6).transition().duration(g).attr("y",t).style("opacity",1),C.transition().duration(g).text(A).attr("y",t).style("opacity",1),C.exit().transition().duration(g).attr("y",t).style("opacity",1e-6).remove()}),a.timer.flush()}var e=1,f=1,g=0,h=null,i=Number,j=b,k=c,l=null;return d.width=function(a){return arguments.length?(e=a,d):e},d.height=function(a){return arguments.length?(f=a,d):f},d.tickFormat=function(a){return arguments.length?(l=a,d):l},d.duration=function(a){return arguments.length?(g=a,d):g},d.domain=function(b){return arguments.length?(h=null===b?b:a.functor(b),d):h},d.value=function(a){return arguments.length?(i=a,d):i},d.whiskers=function(a){return arguments.length?(j=a,d):j},d.quartiles=function(a){return arguments.length?(k=a,d):k},d}}(),c.boxPlot=function(b,d){function e(a){return function(b){var c=b.quartiles[0],d=b.quartiles[2],e=(d-c)*a,f=-1,g=b.length;do++f;while(b[f]d+e);return[f,g]}}function f(a){var b=a.enter().append("g");b.attr("class","box").attr("transform",p).call(m).on("click",function(a){i.filter(a.key),i.redrawGroup()})}function g(b){c.transition(b,i.transitionDuration()).attr("transform",p).call(m).each(function(){a.select(this).select("rect.box").attr("fill",i.getColor)})}function h(a){a.exit().remove().call(m)}var i=c.coordinateGridMixin({}),j=1.5,k=e,l=k(j),m=a.box(),n=null,o=function(a,b){return i.isOrdinal()?i.x().rangeBand():a/(1+i.boxPadding())/b};i.yAxisPadding(12),i.x(a.scale.ordinal()),i.xUnits(c.units.ordinal),i.data(function(a){return a.all().map(function(a){return a.map=function(b){return b.call(a,a)},a}).filter(function(a){var b=i.valueAccessor()(a);return 0!==b.length})}),i.boxPadding=i._rangeBandPadding,i.boxPadding(.8),i.outerPadding=i._outerRangeBandPadding,i.outerPadding(.5),i.boxWidth=function(b){return arguments.length?(o=a.functor(b),i):o};var p=function(a,b){var c=i.x()(i.keyAccessor()(a,b));return"translate("+c+", 0)"};return i._preprocessData=function(){i.elasticX()&&i.x().domain([])},i.plotData=function(){var a=o(i.effectiveWidth(),i.xUnitCount());m.whiskers(l).width(a).height(i.effectiveHeight()).value(i.valueAccessor()).domain(i.y().domain()).duration(i.transitionDuration()).tickFormat(n);var b=i.chartBodyG().selectAll("g.box").data(i.data(),function(a){return a.key});f(b),g(b),h(b),i.fadeDeselectedArea()},i.fadeDeselectedArea=function(){i.hasFilter()?i.g().selectAll("g.box").each(function(a){i.isSelectedNode(a)?i.highlightSelected(this):i.fadeDeselected(this)}):i.g().selectAll("g.box").each(function(){i.resetHighlight(this)})},i.isSelectedNode=function(a){return i.hasFilter(a.key)},i.yAxisMin=function(){var b=a.min(i.data(),function(b){return a.min(i.valueAccessor()(b))});return c.utils.subtract(b,i.yAxisPadding())},i.yAxisMax=function(){var b=a.max(i.data(),function(b){return a.max(i.valueAccessor()(b))});return c.utils.add(b,i.yAxisPadding())},i.tickFormat=function(a){return arguments.length?(n=a,i):n},i.anchor(b,d)},c.selectMenu=function(b,d){function e(){var a=h.selectAll("option."+j).data(k.data(),function(a){return k.keyAccessor()(a)});return a.enter().append("option").classed(j,!0).attr("value",function(a){return k.keyAccessor()(a)}),a.text(k.title()),a.exit().remove(),h.selectAll("option."+j).sort(o),h.on("change",f),a}function f(b,c){var d,e=a.event.target;if(e.selectedOptions){var f=Array.prototype.slice.call(e.selectedOptions);d=f.map(function(a){return a.value})}else{var g=[].slice.call(a.event.target.options);d=g.filter(function(a){return a.selected}).map(function(a){return a.value})}1===d.length&&""===d[0]?d=null:m||1!==d.length||(d=d[0]),k.onChange(d)}function g(){m?h.attr("multiple",!0):h.attr("multiple",null),null!==n?h.attr("size",n):h.attr("size",null)}var h,i="dc-select-menu",j="dc-select-option",k=c.baseMixin({}),l="Select all",m=!1,n=null,o=function(a,b){return k.keyAccessor()(a)>k.keyAccessor()(b)?1:k.keyAccessor()(b)>k.keyAccessor()(a)?-1:0},p=function(a){return k.valueAccessor()(a)>0};return k.data(function(a){return a.all().filter(p)}),k._doRender=function(){return k.select("select").remove(),h=k.root().append("select").classed(i,!0),h.append("option").text(l).attr("value",""),k._doRedraw(),k},k._doRedraw=function(){return g(),e(),k.hasFilter()&&m?h.selectAll("option").property("selected",function(a){return a&&k.filters().indexOf(String(k.keyAccessor()(a)))>=0}):k.hasFilter()?h.property("value",k.filter()):h.property("value",""),k},k.onChange=function(a){a&&m?k.replaceFilter([a]):a?k.replaceFilter(a):k.filterAll(),c.events.trigger(function(){k.redrawGroup()})},k.order=function(a){return arguments.length?(o=a,k):o},k.promptText=function(a){return arguments.length?(l=a,k):l},k.filterDisplayed=function(a){return arguments.length?(p=a,k):p},k.multiple=function(a){return arguments.length?(m=a,k):m},k.size=function(a){return arguments.length?(n=a,k):n},k.anchor(b,d)},c.abstractBubbleChart=c.bubbleMixin,c.baseChart=c.baseMixin,c.capped=c.capMixin,c.colorChart=c.colorMixin,c.coordinateGridChart=c.coordinateGridMixin,c.marginable=c.marginMixin,c.stackableChart=c.stackMixin,c.d3=a,c.crossfilter=b,c}if("function"==typeof define&&define.amd)define(["d3","crossfilter"],a);else if("object"==typeof module&&module.exports){var b=require("d3"),c=require("crossfilter");"function"!=typeof c&&(c=c.crossfilter),module.exports=a(b,c)}else this.dc=a(d3,crossfilter)}(); +}),g.colorAccessor(function(){return g._groupName});var k=function(a){return"translate("+g.x()(g.keyAccessor()(a))+","+g.y()(g.valueAccessor()(a))+")"},l=3,m=5,n=0;return h.size(function(a){return i(a)?this.filtered?Math.pow(m,2):Math.pow(l,2):n}),c.override(g,"_filter",function(a){return arguments.length?g.__filter(c.filters.RangedTwoDimensionalFilter(a)):g.__filter()}),g.plotData=function(){var a=g.chartBodyG().selectAll("path.symbol").data(g.data());a.enter().append("path").attr("class","symbol").attr("opacity",0).attr("fill",g.getColor).attr("transform",k),c.transition(a,g.transitionDuration()).attr("opacity",function(a){return i(a)?1:0}).attr("fill",g.getColor).attr("transform",k).attr("d",h),c.transition(a.exit(),g.transitionDuration()).attr("opacity",0).remove()},g.existenceAccessor=function(a){return arguments.length?(i=a,this):i},g.symbol=function(a){return arguments.length?(h.type(a),g):h.type()},g.symbolSize=function(a){return arguments.length?(l=a,g):l},g.highlightedSize=function(a){return arguments.length?(m=a,g):m},g.hiddenSize=function(a){return arguments.length?(n=a,g):n},g.legendables=function(){return[{chart:g,name:g._groupName,color:g.getColor()}]},g.legendHighlight=function(b){e(function(a){return a.attr("fill")===b.color},m),g.selectAll(".chart-body path.symbol").filter(function(){return a.select(this).attr("fill")!==b.color}).classed("fadeout",!0)},g.legendReset=function(b){e(function(a){return a.attr("fill")===b.color},l),g.selectAll(".chart-body path.symbol").filter(function(){return a.select(this).attr("fill")!==b.color}).classed("fadeout",!1)},g.setHandlePaths=function(){},g.extendBrush=function(){var a=g.brush().extent();return g.round()&&(a[0]=a[0].map(g.round()),a[1]=a[1].map(g.round()),g.g().select(".brush").call(g.brush().extent(a))),a},g.brushIsEmpty=function(a){return g.brush().empty()||!a||a[0][0]>=a[1][0]||a[0][1]>=a[1][1]},g._brushing=function(){var a=g.extendBrush();if(g.redrawBrush(g.g()),g.brushIsEmpty(a))c.events.trigger(function(){g.filter(null),g.redrawGroup()}),f(!1);else{var b=c.filters.RangedTwoDimensionalFilter(a);c.events.trigger(function(){g.filter(null),g.filter(b),g.redrawGroup()},c.constants.EVENT_DELAY),f(b)}},g.setBrushY=function(a){a.call(g.brush().y(g.y()))},g.anchor(b,d)},c.numberDisplay=function(b,d){var e="number-display",f=a.format(".2s"),g=c.baseMixin({}),h={one:"",some:"",none:""};return g._mandatoryAttributes(["group"]),g.html=function(a){return arguments.length?(a.none?h.none=a.none:a.one?h.none=a.one:a.some&&(h.none=a.some),a.one?h.one=a.one:a.some&&(h.one=a.some),a.some?h.some=a.some:a.one&&(h.some=a.one),g):h},g.value=function(){return g.data()},g.data(function(a){var b=a.value?a.value():a.top(1)[0];return g.valueAccessor()(b)}),g.transitionDuration(250),g._doRender=function(){var b=g.value(),c=g.selectAll("."+e);c.empty()&&(c=c.data([0]).enter().append("span").attr("class",e)),c.transition().duration(g.transitionDuration()).ease("quad-out-in").tween("text",function(){var c=a.interpolateNumber(this.lastValue||0,b);return this.lastValue=b,function(a){var d=null,e=g.formatNumber()(c(a));0===b&&""!==h.none?d=h.none:1===b&&""!==h.one?d=h.one:""!==h.some&&(d=h.some),this.innerHTML=d?d.replace("%number",e):e}})},g._doRedraw=function(){return g._doRender()},g.formatNumber=function(a){return arguments.length?(f=a,g):f},g.anchor(b,d)},c.heatMap=function(b,d){function e(a,b){var d=p.selectAll(".box-group").filter(function(c){return c.key[a]===b}),e=d.filter(function(a){return!p.hasFilter(a.key)});c.events.trigger(function(){e.empty()?d.each(function(a){p.filter(a.key)}):e.each(function(a){p.filter(a.key)}),p.redrawGroup()})}var f,g,h,i=6.75,j=a.ascending,k=a.ascending,l=a.scale.ordinal(),m=a.scale.ordinal(),n=i,o=i,p=c.colorMixin(c.marginMixin(c.baseMixin({})));p._mandatoryAttributes(["group"]),p.title(p.colorAccessor());var q=function(a){return a},r=function(a){return a};p.colsLabel=function(a){return arguments.length?(q=a,p):q},p.rowsLabel=function(a){return arguments.length?(r=a,p):r};var s=function(a){e(0,a)},t=function(a){e(1,a)},u=function(a){var b=a.key;c.events.trigger(function(){p.filter(b),p.redrawGroup()})};return c.override(p,"filter",function(a){return arguments.length?p._filter(c.filters.TwoDimensionalFilter(a)):p._filter()}),p.rows=function(a){return arguments.length?(h=a,p):h},p.rowOrdering=function(a){return arguments.length?(k=a,p):k},p.cols=function(a){return arguments.length?(g=a,p):g},p.colOrdering=function(a){return arguments.length?(j=a,p):j},p._doRender=function(){return p.resetSvg(),f=p.svg().append("g").attr("class","heatmap").attr("transform","translate("+p.margins().left+","+p.margins().top+")"),p._doRedraw()},p._doRedraw=function(){var a=p.data(),b=p.rows()||a.map(p.valueAccessor()),d=p.cols()||a.map(p.keyAccessor());k&&(b=b.sort(k)),j&&(d=d.sort(j)),b=m.domain(b),d=l.domain(d);var e=b.domain().length,g=d.domain().length,h=Math.floor(p.effectiveWidth()/g),i=Math.floor(p.effectiveHeight()/e);d.rangeRoundBands([0,p.effectiveWidth()]),b.rangeRoundBands([p.effectiveHeight(),0]);var q=f.selectAll("g.box-group").data(p.data(),function(a,b){return p.keyAccessor()(a,b)+"\x00"+p.valueAccessor()(a,b)}),r=q.enter().append("g").attr("class","box-group");r.append("rect").attr("class","heat-box").attr("fill","white").on("click",p.boxOnClick()),p.renderTitle()&&(r.append("title"),q.select("title").text(p.title())),c.transition(q.select("rect"),p.transitionDuration()).attr("x",function(a,b){return d(p.keyAccessor()(a,b))}).attr("y",function(a,c){return b(p.valueAccessor()(a,c))}).attr("rx",n).attr("ry",o).attr("fill",p.getColor).attr("width",h).attr("height",i),q.exit().remove();var s=f.selectAll("g.cols");s.empty()&&(s=f.append("g").attr("class","cols axis"));var t=s.selectAll("text").data(d.domain());t.enter().append("text").attr("x",function(a){return d(a)+h/2}).style("text-anchor","middle").attr("y",p.effectiveHeight()).attr("dy",12).on("click",p.xAxisOnClick()).text(p.colsLabel()),c.transition(t,p.transitionDuration()).text(p.colsLabel()).attr("x",function(a){return d(a)+h/2}).attr("y",p.effectiveHeight()),t.exit().remove();var u=f.selectAll("g.rows");u.empty()&&(u=f.append("g").attr("class","rows axis"));var v=u.selectAll("text").data(b.domain());return v.enter().append("text").attr("dy",6).style("text-anchor","end").attr("x",0).attr("dx",-2).on("click",p.yAxisOnClick()).text(p.rowsLabel()),c.transition(v,p.transitionDuration()).text(p.rowsLabel()).attr("y",function(a){return b(a)+i/2}),v.exit().remove(),p.hasFilter()?p.selectAll("g.box-group").each(function(a){p.isSelectedNode(a)?p.highlightSelected(this):p.fadeDeselected(this)}):p.selectAll("g.box-group").each(function(){p.resetHighlight(this)}),p},p.boxOnClick=function(a){return arguments.length?(u=a,p):u},p.xAxisOnClick=function(a){return arguments.length?(s=a,p):s},p.yAxisOnClick=function(a){return arguments.length?(t=a,p):t},p.xBorderRadius=function(a){return arguments.length?(n=a,p):n},p.yBorderRadius=function(a){return arguments.length?(o=a,p):o},p.isSelectedNode=function(a){return p.hasFilter(a.key)},p.anchor(b,d)},function(){function b(a){return[0,a.length-1]}function c(b){return[a.quantile(b,.25),a.quantile(b,.5),a.quantile(b,.75)]}a.box=function(){function d(b){b.each(function(b,c){b=b.map(i).sort(a.ascending);var d=a.select(this),m=b.length,n=b[0],o=b[m-1],p=b.quartiles=k(b),q=j&&j.call(this,b,c),r=q&&q.map(function(a){return b[a]}),s=q?a.range(0,q[0]).concat(a.range(q[1]+1,m)):a.range(m),t=a.scale.linear().domain(h&&h.call(this,b,c)||[n,o]).range([f,0]),u=this.__chart__||a.scale.linear().domain([0,1/0]).range(t.range());this.__chart__=t;var v=d.selectAll("line.center").data(r?[r]:[]);v.enter().insert("line","rect").attr("class","center").attr("x1",e/2).attr("y1",function(a){return u(a[0])}).attr("x2",e/2).attr("y2",function(a){return u(a[1])}).style("opacity",1e-6).transition().duration(g).style("opacity",1).attr("y1",function(a){return t(a[0])}).attr("y2",function(a){return t(a[1])}),v.transition().duration(g).style("opacity",1).attr("y1",function(a){return t(a[0])}).attr("y2",function(a){return t(a[1])}),v.exit().transition().duration(g).style("opacity",1e-6).attr("y1",function(a){return t(a[0])}).attr("y2",function(a){return t(a[1])}).remove();var w=d.selectAll("rect.box").data([p]);w.enter().append("rect").attr("class","box").attr("x",0).attr("y",function(a){return u(a[2])}).attr("width",e).attr("height",function(a){return u(a[0])-u(a[2])}).transition().duration(g).attr("y",function(a){return t(a[2])}).attr("height",function(a){return t(a[0])-t(a[2])}),w.transition().duration(g).attr("y",function(a){return t(a[2])}).attr("height",function(a){return t(a[0])-t(a[2])});var x=d.selectAll("line.median").data([p[1]]);x.enter().append("line").attr("class","median").attr("x1",0).attr("y1",u).attr("x2",e).attr("y2",u).transition().duration(g).attr("y1",t).attr("y2",t),x.transition().duration(g).attr("y1",t).attr("y2",t);var y=d.selectAll("line.whisker").data(r||[]);y.enter().insert("line","circle, text").attr("class","whisker").attr("x1",0).attr("y1",u).attr("x2",e).attr("y2",u).style("opacity",1e-6).transition().duration(g).attr("y1",t).attr("y2",t).style("opacity",1),y.transition().duration(g).attr("y1",t).attr("y2",t).style("opacity",1),y.exit().transition().duration(g).attr("y1",t).attr("y2",t).style("opacity",1e-6).remove();var z=d.selectAll("circle.outlier").data(s,Number);z.enter().insert("circle","text").attr("class","outlier").attr("r",5).attr("cx",e/2).attr("cy",function(a){return u(b[a])}).style("opacity",1e-6).transition().duration(g).attr("cy",function(a){return t(b[a])}).style("opacity",1),z.transition().duration(g).attr("cy",function(a){return t(b[a])}).style("opacity",1),z.exit().transition().duration(g).attr("cy",function(a){return t(b[a])}).style("opacity",1e-6).remove();var A=l||t.tickFormat(8),B=d.selectAll("text.box").data(p);B.enter().append("text").attr("class","box").attr("dy",".3em").attr("dx",function(a,b){return 1&b?6:-6}).attr("x",function(a,b){return 1&b?e:0}).attr("y",u).attr("text-anchor",function(a,b){return 1&b?"start":"end"}).text(A).transition().duration(g).attr("y",t),B.transition().duration(g).text(A).attr("y",t);var C=d.selectAll("text.whisker").data(r||[]);C.enter().append("text").attr("class","whisker").attr("dy",".3em").attr("dx",6).attr("x",e).attr("y",u).text(A).style("opacity",1e-6).transition().duration(g).attr("y",t).style("opacity",1),C.transition().duration(g).text(A).attr("y",t).style("opacity",1),C.exit().transition().duration(g).attr("y",t).style("opacity",1e-6).remove()}),a.timer.flush()}var e=1,f=1,g=0,h=null,i=Number,j=b,k=c,l=null;return d.width=function(a){return arguments.length?(e=a,d):e},d.height=function(a){return arguments.length?(f=a,d):f},d.tickFormat=function(a){return arguments.length?(l=a,d):l},d.duration=function(a){return arguments.length?(g=a,d):g},d.domain=function(b){return arguments.length?(h=null===b?b:a.functor(b),d):h},d.value=function(a){return arguments.length?(i=a,d):i},d.whiskers=function(a){return arguments.length?(j=a,d):j},d.quartiles=function(a){return arguments.length?(k=a,d):k},d}}(),c.boxPlot=function(b,d){function e(a){return function(b){var c=b.quartiles[0],d=b.quartiles[2],e=(d-c)*a,f=-1,g=b.length;do++f;while(b[f]d+e);return[f,g]}}function f(a){var b=a.enter().append("g");b.attr("class","box").attr("transform",p).call(m).on("click",function(a){i.filter(a.key),i.redrawGroup()})}function g(b){c.transition(b,i.transitionDuration()).attr("transform",p).call(m).each(function(){a.select(this).select("rect.box").attr("fill",i.getColor)})}function h(a){a.exit().remove().call(m)}var i=c.coordinateGridMixin({}),j=1.5,k=e,l=k(j),m=a.box(),n=null,o=function(a,b){return i.isOrdinal()?i.x().rangeBand():a/(1+i.boxPadding())/b};i.yAxisPadding(12),i.x(a.scale.ordinal()),i.xUnits(c.units.ordinal),i.data(function(a){return a.all().map(function(a){return a.map=function(b){return b.call(a,a)},a}).filter(function(a){var b=i.valueAccessor()(a);return 0!==b.length})}),i.boxPadding=i._rangeBandPadding,i.boxPadding(.8),i.outerPadding=i._outerRangeBandPadding,i.outerPadding(.5),i.boxWidth=function(b){return arguments.length?(o=a.functor(b),i):o};var p=function(a,b){var c=i.x()(i.keyAccessor()(a,b));return"translate("+c+", 0)"};return i._preprocessData=function(){i.elasticX()&&i.x().domain([])},i.plotData=function(){var a=o(i.effectiveWidth(),i.xUnitCount());m.whiskers(l).width(a).height(i.effectiveHeight()).value(i.valueAccessor()).domain(i.y().domain()).duration(i.transitionDuration()).tickFormat(n);var b=i.chartBodyG().selectAll("g.box").data(i.data(),function(a){return a.key});f(b),g(b),h(b),i.fadeDeselectedArea()},i.fadeDeselectedArea=function(){i.hasFilter()?i.g().selectAll("g.box").each(function(a){i.isSelectedNode(a)?i.highlightSelected(this):i.fadeDeselected(this)}):i.g().selectAll("g.box").each(function(){i.resetHighlight(this)})},i.isSelectedNode=function(a){return i.hasFilter(a.key)},i.yAxisMin=function(){var b=a.min(i.data(),function(b){return a.min(i.valueAccessor()(b))});return c.utils.subtract(b,i.yAxisPadding())},i.yAxisMax=function(){var b=a.max(i.data(),function(b){return a.max(i.valueAccessor()(b))});return c.utils.add(b,i.yAxisPadding())},i.tickFormat=function(a){return arguments.length?(n=a,i):n},i.anchor(b,d)},c.selectMenu=function(b,d){function e(){var a=h.selectAll("option."+j).data(k.data(),function(a){return k.keyAccessor()(a)});return a.enter().append("option").classed(j,!0).attr("value",function(a){return k.keyAccessor()(a)}),a.text(k.title()),a.exit().remove(),h.selectAll("option."+j).sort(o),h.on("change",f),a}function f(b,c){var d,e=a.event.target;if(e.selectedOptions){var f=Array.prototype.slice.call(e.selectedOptions);d=f.map(function(a){return a.value})}else{var g=[].slice.call(a.event.target.options);d=g.filter(function(a){return a.selected}).map(function(a){return a.value})}1===d.length&&""===d[0]?d=null:m||1!==d.length||(d=d[0]),k.onChange(d)}function g(){m?h.attr("multiple",!0):h.attr("multiple",null),null!==n?h.attr("size",n):h.attr("size",null)}var h,i="dc-select-menu",j="dc-select-option",k=c.baseMixin({}),l="Select all",m=!1,n=null,o=function(a,b){return k.keyAccessor()(a)>k.keyAccessor()(b)?1:k.keyAccessor()(b)>k.keyAccessor()(a)?-1:0},p=function(a){return k.valueAccessor()(a)>0};return k.data(function(a){return a.all().filter(p)}),k._doRender=function(){return k.select("select").remove(),h=k.root().append("select").classed(i,!0),h.append("option").text(l).attr("value",""),k._doRedraw(),k},k._doRedraw=function(){return g(),e(),k.hasFilter()&&m?h.selectAll("option").property("selected",function(a){return a&&k.filters().indexOf(String(k.keyAccessor()(a)))>=0}):k.hasFilter()?h.property("value",k.filter()):h.property("value",""),k},k.onChange=function(a){a&&m?k.replaceFilter([a]):a?k.replaceFilter(a):k.filterAll(),c.events.trigger(function(){k.redrawGroup()})},k.order=function(a){return arguments.length?(o=a,k):o},k.promptText=function(a){return arguments.length?(l=a,k):l},k.filterDisplayed=function(a){return arguments.length?(p=a,k):p},k.multiple=function(a){return arguments.length?(m=a,k):m},k.size=function(a){return arguments.length?(n=a,k):n},k.anchor(b,d)},c.abstractBubbleChart=c.bubbleMixin,c.baseChart=c.baseMixin,c.capped=c.capMixin,c.colorChart=c.colorMixin,c.coordinateGridChart=c.coordinateGridMixin,c.marginable=c.marginMixin,c.stackableChart=c.stackMixin,c.d3=a,c.crossfilter=b,c}if("function"==typeof define&&define.amd)define(["d3","crossfilter"],a);else if("object"==typeof module&&module.exports){var b=require("d3"),c=require("crossfilter");"function"!=typeof c&&(c=c.crossfilter),module.exports=a(b,c)}else this.dc=a(d3,crossfilter)}(); //# sourceMappingURL=dc.min.js.map \ No newline at end of file diff --git a/dc.min.js.map b/dc.min.js.map index b5b8b313f..2ce47e423 100644 --- a/dc.min.js.map +++ b/dc.min.js.map @@ -1 +1 @@ -{"version":3,"file":"dc.min.js","sources":["dc.js"],"names":["_dc","d3","crossfilter","dc","version","constants","CHART_CLASS","DEBUG_GROUP_CLASS","STACK_CLASS","DESELECTED_CLASS","SELECTED_CLASS","NODE_INDEX_NAME","GROUP_INDEX_NAME","DEFAULT_CHART_GROUP","EVENT_DELAY","NEGLIGIBLE_NUMBER","_renderlet","chartRegistry","initializeChartGroup","group","_chartMap","has","chart","e","indexOf","register","push","deregister","i","length","anchorName","splice","clear","list","registerChart","deregisterChart","hasChart","deregisterAllCharts","filterAll","charts","refocusAll","focus","renderAll","render","redrawAll","redraw","disableTransitions","transition","selections","duration","callback","name","undefined","s","optionalTransition","enable","selection","units","integers","start","end","Math","abs","ordinal","domain","fp","precision","_f","d","resolution","utils","isNegligible","floor","ceil","round","n","override","obj","functionName","newFunction","existingFunction","renderlet","_","arguments","instanceOfChart","o","Object","__dcFlag__","errors","Exception","msg","_msg","this","message","toString","stack","Error","prototype","create","constructor","InvalidStateException","apply","BadArgumentException","dateFormat","time","format","printers","filters","filter","Array","printSingleValue","pluck","f","call","Date","isFloat","fformat","isInteger","add","l","r","replace","setTime","getTime","setDate","getDate","percentage","subtract","isNumber","clamp","val","min","max","_idCounter","uniqueId","nameToId","toLowerCase","appendOrSelect","parent","selector","tag","element","select","empty","append","safeNumber","logger","enableDebugLog","warn","console","log","debug","deprecate","fn","deprecated","warned","events","current","trigger","closure","delay","setTimeout","RangedFilter","low","high","range","isFiltered","value","filterType","TwoDimensionalFilter","RangedTwoDimensionalFilter","fromBottomLeft","Infinity","x","y","baseMixin","_chart","sizeSvg","_svg","attr","width","height","generateSvg","root","checkForMandatoryAttributes","a","applyFilters","dimension","fs","_filterHandler","_filters","_dimension","_group","_anchor","_root","_isChild","_orderSort","_legend","_minWidth","_defaultWidth","getBoundingClientRect","_width","_minHeight","_defaultHeight","_height","_keyAccessor","_valueAccessor","_label","_ordering","_renderLabel","_title","keyAccessor","valueAccessor","_renderTitle","_controlsUseVisibility","_transitionDuration","_filterPrinter","_mandatoryAttributes","_chartGroup","_listeners","dispatch","filterRange","filterFunction","filterExact","_data","all","functor","node","minWidth","minHeight","expireCache","data","_groupName","ordering","orderFunction","quicksort","by","_computeOrderedGroups","dataCopy","slice","selectAll","anchor","chartGroup","classed","id","chartID","rootElement","svg","svgElement","resetSvg","remove","filterPrinter","filterPrinterFunction","controlsUseVisibility","useVisibility","turnOnControls","attribute","style","text","turnOffControls","transitionDuration","preRender","forEach","result","_doRender","_activateRenderlets","event","pretransition","each","preRedraw","_doRedraw","redrawGroup","renderGroup","_invokeFilteredListener","filtered","_invokeZoomedListener","zoomed","_hasFilterHandler","some","hasFilterHandler","hasFilter","_removeFilterHandler","removeFilterHandler","_addFilterHandler","addFilterHandler","_resetFilterHandler","resetFilterHandler","replaceFilter","highlightSelected","fadeDeselected","resetHighlight","onClick","datum","filterHandler","legendables","legendHighlight","legendReset","legendToggle","isLegendableHidden","label","labelFunction","renderLabel","title","titleFunction","renderTitle","renderletFunction","on","legend","options","opts","applyOptions","listener","marginMixin","_margin","top","right","bottom","left","margins","effectiveWidth","effectiveHeight","colorMixin","_colors","scale","category20c","_defaultAccessor","_colorAccessor","colors","colorScale","quantize","ordinalColors","linearColors","linear","interpolate","interpolateHcl","colorAccessor","defaultColorAccessor","colorDomain","calculateColorDomain","newDomain","getColor","colorCalculator","coordinateGridMixin","zoomHandler","_refocused","_zoomOutRestrict","constrainRange","_xOriginalDomain","_rangeChart","domFilter","rescale","rangesEqual","compareDomains","d1","d2","elem","prepareXAxis","g","isOrdinal","elasticX","_x","_ordinalXDomain","xAxisMin","xAxisMax","xdom","_lastXDomain","rangeBands","xAxisLength","_rangeBandPadding","_useOuterPadding","_outerRangeBandPadding","_xAxis","renderVerticalGridLines","gridLineG","VERTICAL_CLASS","_renderVerticalGridLine","insert","GRID_LINE_CLASS","ticks","tickValues","lines","linesGEnter","enter","_xAxisY","exit","brushHeight","getClipPathId","generateClipPath","defs","_parent","chartBodyClip","padding","_clipPadding","yAxisHeight","drawChart","_brushOn","_prepareYAxis","plotData","_resizing","renderXAxis","elasticY","renderYAxis","renderBrush","redrawBrush","fadeDeselectedArea","configureMouseZoom","_mouseZoomable","_enableMouseZoom","_hasBeenMouseZoomable","_disableMouseZoom","constraint","constrainedRange","range1","range2","valueOf","hasRangeSelected","HORIZONTAL_CLASS","Y_AXIS_LABEL_CLASS","X_AXIS_LABEL_CLASS","DEFAULT_AXIS_LABEL_PADDING","category10","_g","_chartBodyG","_xAxisLabel","_y","_yAxisLabel","_round","_unitCount","_focusChart","axis","orient","_xUnits","_xAxisPadding","_xElasticity","_xAxisLabelPadding","_yAxis","_yAxisPadding","_yElasticity","_yAxisLabelPadding","_brush","brush","_renderHorizontalGridLine","_zoomScale","_zoom","behavior","zoom","_nullZoom","_useRightYAxis","rangeChart","focusChart","zoomScale","extent","zoomOutRestrict","_generateG","gElement","mouseZoomable","chartBodyG","xScale","xOriginalDomain","xUnits","xAxis","xAxisPadding","xUnitCount","useRightYAxis","groups","map","axisXG","axisXLab","xAxisLabel","labelText","yAxisMin","yAxisMax","rangeRound","_renderHorizontalGridLinesForAxis","renderYAxisLabel","axisClass","rotation","labelXPosition","axisYLab","labelYPosition","renderYAxisAt","position","axisYG","axisPosition","_yAxisX","labelPosition","yAxisLabel","yScale","yAxis","renderHorizontalGridLines","yAxisPadding","_filter","_brushing","gBrush","setBrushY","setHandlePaths","resizeHandlePath","extendBrush","brushIsEmpty","rangedFilter","doTransition","clipPadding","_preprocessData","scaleExtent","size","refocused","c","brushOn","stackMixin","prepareValues","layer","layerIdx","valAccessor","accessor","String","values","hidden","domainFilter","xDomain","p","findLayerByName","_stack","flattenStack","valueses","concat","visability","_stackLayout","layout","_titles","_hidableStacks","hidableStacks","hideStack","stackName","showStack","getValueAccessorByIndex","index","y0","titleAccessor","stackLayout","layers","flat","ordered","color","capMixin","_cap","_othersLabel","_othersGrouper","topRows","topRowsSum","sum","allRows","allRowsSum","topKeys","allKeys","topSet","set","others","key","cappedKeyAccessor","cappedValueAccessor","cap","count","othersLabel","othersGrouper","grouperFunction","_onClick","bubbleMixin","_maxBubbleRelativeSize","_minRadiusWithLabel","BUBBLE_NODE_CLASS","BUBBLE_CLASS","MIN_RADIUS","_r","_rValueAccessor","bubbleRadiusScale","radiusValueAccessor","rMin","rMax","bubbleR","isNaN","labelOpacity","_doRenderLabel","bubbleGEnter","doUpdateLabels","labels","_doRenderTitles","doUpdateTitles","minRadius","radius","minRadiusWithLabel","maxBubbleRelativeSize","relativeSize","isSelectedNode","pieChart","_radius","_givenRadius","pieData","arc","buildArcs","pie","pieLayout","_emptyCssClass","_emptyTitle","slices","_sliceCssClass","createElements","updateElements","removeElements","highlightFilter","cx","cy","slicesEnter","createSliceNodes","createSlicePath","createTitles","createLabels","slicePath","fill","safeArc","attrTween","tweenPie","positionLabels","labelsEnter","sliceHasNoData","sliceTooSmall","isSelectedSlice","classes","_externalLabelRadius","updateSlicePaths","updateLabels","updateTitles","slicePaths","outerRadius","_externalRadiusPadding","innerRadius","_innerRadius","sort","angle","endAngle","startAngle","_minAngleForLabel","b","_current","isOffCanvas","t","path","centroid","highlightSliceFromLegendable","legendable","highlighted","_cx","_cy","DEFAULT_MIN_ANGLE_FOR_LABEL","slicesCap","externalRadiusPadding","minAngleForLabel","emptyTitle","externalLabels","barChart","barHeight","renderBars","layerIndex","bars","_centerBar","_barWidth","_gap","calculateBarWidth","numberOfBars","rangeBand","barPadding","MIN_BAR_WIDTH","colorFilter","inv","item","match","DEFAULT_GAP_BETWEEN_BARS","_alwaysUseRounding","_rescale","_render","centerBar","outerPadding","gap","alwaysUseRounding","_xAxisMax","res","lineChart","drawLine","layersEnter","line","_interpolate","tension","_tension","_defined","defined","_dashStyle","safeD","drawArea","_renderArea","area","drawDots","chartBody","xyTipsOn","tooltipListClass","TOOLTIP_G_CLASS","tooltips","points","createRefLines","dots","DOT_CIRCLE_CLASS","getDotRadius","_dataPointFillOpacity","_dataPointStrokeOpacity","dot","showDot","showRefLines","hideDot","hideRefLines","yRefLine","Y_AXIS_REF_LINE_CLASS","xRefLine","X_AXIS_REF_LINE_CLASS","_dotRadius","yAxisX","yAxisRefPathD","xAxisRefPathD","_dataPointRadius","dashstyle","join","DEFAULT_DOT_RADIUS","DEFAULT_DOT_OPACITY","_xyTipsOn","layersList","dashStyle","renderArea","dotRadius","renderDataPoints","fillOpacity","strokeOpacity","_legendables","dataCount","_formatNumber","_html","html","formatNumber","formatter","tot","selected","dataTable","renderGroups","bAllFunctions","_columns","headcols","headGroup","HEAD_CSS_CLASS","_doColumnHeaderFormat","nestEntries","rowGroup","_showGroups","GROUP_CSS_CLASS","LABEL_CSS_CLASS","entries","_order","ascending","_size","nest","sortKeys","_sortBy","renderRows","rows","order","ROW_CSS_CLASS","rowEnter","v","COLUMN_CSS_CLASS","_doColumnValueFormat","_doColumnHeaderFnToString","_doColumnHeaderCapitalize","charAt","toUpperCase","i1","i2","lastIndexOf","substring","i3","columns","sortBy","showGroups","dataGrid","GRID_CSS_CLASS","itemGroup","_htmlGroup","_beginSlice","_endSlice","renderItems","items","ITEM_CSS_CLASS","JSON","stringify","beginSlice","endSlice","htmlGroup","sortByFunction","bubbleChart","renderNodes","bubbleG","bubbleLocator","updateNodes","removeNodes","bubbleX","bubbleY","_elasticRadius","elasticRadius","compositeChart","prepareRightYAxis","rightY","rightYAxisMin","rightYAxisMax","rightYAxis","prepareLeftYAxis","generateChildG","child","SUB_CHART_CLASS","leftYAxisChildren","_children","rightYAxisChildren","getYAxisMin","getYAxisMax","getAllXAxisMinFromChildCharts","getAllXAxisMaxFromChildCharts","_rightY","DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING","_childOptions","_shareColors","_shareTitle","_rightYAxis","_rightYAxisLabel","_rightYAxisLabelPadding","_rightAxisGridLines","__generateG","rightYAxisLabel","useRightAxisGridLines","childOptions","compose","subChartArray","children","shareColors","shareTitle","reduce","j","seriesChart","keySort","clearChart","_charts","resetChildren","keys","_seriesAccessor","_chartFunction","_seriesSort","_valueSort","childrenChanged","keep","nester","sortValues","nesting","sub","subChart","_compose","chartFunction","seriesAccessor","seriesSort","sortFunction","valueSort","geoChoroplethChart","generateLayeredData","isDataLayer","regionG","renderRegionG","renderPaths","groupAll","geoJson","layerSelector","isSelected","isDeselected","layerNameClass","regionClass","baseClasses","getKey","_geoJsons","paths","currentFill","_projectionFlag","_geoPath","geo","states","selectedRegion","overlayGeoJson","json","projection","geoJsons","geoPath","removeGeoJson","bubbleOverlay","initOverlayG","BUBBLE_OVERLAY_CLASS","initializeBubbles","mapData","_points","point","nodeG","getNodeG","circle","bubbleNodeClass","updateBubbles","flag","debugG","debugText","mouse","rowChart","calculateAxisScale","_elasticX","_rowData","drawAxis","axisG","drawGridLines","_rowCssClass","rootValue","_fixedBarHeight","_hasLabelOffsetY","_labelOffsetY","rect","isSelectedRow","translateX","renderTitleLabel","_titleRowCssClass","lab","_labelOffsetX","_dyOffset","titlelab","_titleLabelOffsetX","x0","_renderTitleLabel","rowsCap","fixedBarHeight","labelOffsetX","labelOffsetY","labelOffsety","titleLabelOffsetX","legendItemHeight","_itemHeight","LABEL_GAP","_horizontal","_legendWidth","_itemWidth","_autoItemWidth","itemEnter","clientHeight","_cumulativeLegendTextWidth","row","translateBy","itemWidth","getBBox","itemHeight","horizontal","legendWidth","autoItemWidth","scatterPlot","resizeSymbolsWhere","condition","symbols","oldSize","_symbol","pow","resizeFiltered","symbol","_existenceAccessor","originalKeyAccessor","_locator","_symbolSize","_highlightedSize","_hiddenSize","__filter","existenceAccessor","type","symbolSize","highlightedSize","hiddenSize","ranged2DFilter","numberDisplay","SPAN_CLASS","one","none","valObj","newValue","span","ease","tween","interp","interpolateNumber","lastValue","num","innerHTML","heatMap","filterAxis","cellsOnAxis","unfilteredCellsOnAxis","_chartBody","_cols","_rows","DEFAULT_BORDER_RADIUS","_colOrdering","_rowOrdering","_colScale","_rowScale","_xBorderRadius","_yBorderRadius","_colsLabel","_rowsLabel","colsLabel","rowsLabel","_xAxisOnClick","_yAxisOnClick","_boxOnClick","rowOrdering","cols","colOrdering","rowCount","colCount","boxWidth","boxHeight","rangeRoundBands","boxes","gEnter","boxOnClick","gCols","gColsText","xAxisOnClick","gRows","gRowsText","yAxisOnClick","handler","xBorderRadius","yBorderRadius","boxWhiskers","boxQuartiles","quantile","box","quartileData","quartiles","whiskerIndices","whiskers","whiskerData","outlierIndices","x1","__chart__","center","medianLine","whisker","outlier","Number","tickFormat","boxTick","whiskerTick","timer","flush","boxPlot","DEFAULT_WHISKERS_IQR","k","q1","q3","iqr","renderBoxes","boxesG","boxesGEnter","boxTransform","_box","updateBoxes","removeBoxes","_whiskerIqrFactor","_whiskersIqr","_whiskers","_tickFormat","_boxWidth","innerChartWidth","boxPadding","xOffset","_calculatedBoxWidth","selectMenu","renderOptions","_select","OPTION_CSS_CLASS","onChange","target","selectedOptions","option","_multiple","setAttributes","SELECT_CSS_CLASS","_promptText","_filterDisplayed","property","promptText","filterDisplayed","multiple","abstractBubbleChart","baseChart","capped","colorChart","coordinateGridChart","marginable","stackableChart","define","amd","module","exports","_d3","require","_crossfilter"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"dc.min.js","sources":["dc.js"],"names":["_dc","d3","crossfilter","dc","version","constants","CHART_CLASS","DEBUG_GROUP_CLASS","STACK_CLASS","DESELECTED_CLASS","SELECTED_CLASS","NODE_INDEX_NAME","GROUP_INDEX_NAME","DEFAULT_CHART_GROUP","EVENT_DELAY","NEGLIGIBLE_NUMBER","_renderlet","chartRegistry","initializeChartGroup","group","_chartMap","has","chart","e","indexOf","register","push","deregister","i","length","anchorName","splice","clear","list","registerChart","deregisterChart","hasChart","deregisterAllCharts","filterAll","charts","refocusAll","focus","renderAll","render","redrawAll","redraw","disableTransitions","transition","selections","duration","callback","name","undefined","s","optionalTransition","enable","selection","units","integers","start","end","Math","abs","ordinal","domain","fp","precision","_f","d","resolution","utils","isNegligible","floor","ceil","round","n","override","obj","functionName","newFunction","existingFunction","renderlet","_","arguments","instanceOfChart","o","Object","__dcFlag__","errors","Exception","msg","_msg","this","message","toString","stack","Error","prototype","create","constructor","InvalidStateException","apply","BadArgumentException","dateFormat","time","format","printers","filters","filter","Array","printSingleValue","pluck","f","call","Date","isFloat","fformat","isInteger","add","l","r","replace","setTime","getTime","setDate","getDate","percentage","subtract","isNumber","clamp","val","min","max","_idCounter","uniqueId","nameToId","toLowerCase","appendOrSelect","parent","selector","tag","element","select","empty","append","safeNumber","logger","enableDebugLog","warn","console","log","debug","deprecate","fn","deprecated","warned","events","current","trigger","closure","delay","setTimeout","RangedFilter","low","high","range","isFiltered","value","filterType","TwoDimensionalFilter","RangedTwoDimensionalFilter","fromBottomLeft","Infinity","x","y","baseMixin","_chart","sizeSvg","_svg","attr","width","height","generateSvg","root","checkForMandatoryAttributes","a","applyFilters","dimension","fs","_filterHandler","_filters","_dimension","_group","_anchor","_root","_isChild","_orderSort","_legend","_minWidth","_defaultWidth","getBoundingClientRect","_width","_minHeight","_defaultHeight","_height","_keyAccessor","_valueAccessor","_label","_ordering","_renderLabel","_title","keyAccessor","valueAccessor","_renderTitle","_controlsUseVisibility","_transitionDuration","_filterPrinter","_mandatoryAttributes","_chartGroup","_listeners","dispatch","filterRange","filterFunction","filterExact","_data","all","functor","node","minWidth","minHeight","expireCache","data","_groupName","ordering","orderFunction","quicksort","by","_computeOrderedGroups","dataCopy","slice","selectAll","anchor","chartGroup","classed","id","chartID","rootElement","svg","svgElement","resetSvg","remove","filterPrinter","filterPrinterFunction","controlsUseVisibility","useVisibility","turnOnControls","attribute","style","text","turnOffControls","transitionDuration","preRender","forEach","result","_doRender","_activateRenderlets","event","pretransition","each","preRedraw","_doRedraw","redrawGroup","renderGroup","_invokeFilteredListener","filtered","_invokeZoomedListener","zoomed","_hasFilterHandler","some","hasFilterHandler","hasFilter","_removeFilterHandler","removeFilterHandler","_addFilterHandler","addFilterHandler","_resetFilterHandler","resetFilterHandler","replaceFilter","highlightSelected","fadeDeselected","resetHighlight","onClick","datum","filterHandler","legendables","legendHighlight","legendReset","legendToggle","isLegendableHidden","label","labelFunction","renderLabel","title","titleFunction","renderTitle","renderletFunction","on","legend","options","opts","applyOptions","listener","marginMixin","_margin","top","right","bottom","left","margins","effectiveWidth","effectiveHeight","colorMixin","_colors","scale","category20c","_defaultAccessor","_colorAccessor","colors","colorScale","quantize","ordinalColors","linearColors","linear","interpolate","interpolateHcl","colorAccessor","defaultColorAccessor","colorDomain","calculateColorDomain","newDomain","getColor","colorCalculator","coordinateGridMixin","zoomHandler","_refocused","_zoomOutRestrict","constrainRange","_xOriginalDomain","_rangeChart","domFilter","rescale","rangesEqual","compareDomains","d1","d2","elem","prepareXAxis","g","isOrdinal","elasticX","_x","_ordinalXDomain","xAxisMin","xAxisMax","xdom","_lastXDomain","rangeBands","xAxisLength","_rangeBandPadding","_useOuterPadding","_outerRangeBandPadding","_xAxis","renderVerticalGridLines","gridLineG","VERTICAL_CLASS","_renderVerticalGridLine","insert","GRID_LINE_CLASS","ticks","tickValues","lines","linesGEnter","enter","_xAxisY","exit","brushHeight","getClipPathId","generateClipPath","defs","_parent","chartBodyClip","padding","_clipPadding","yAxisHeight","drawChart","_brushOn","_prepareYAxis","plotData","_resizing","renderXAxis","elasticY","renderYAxis","renderBrush","redrawBrush","fadeDeselectedArea","configureMouseZoom","_mouseZoomable","_enableMouseZoom","_hasBeenMouseZoomable","_disableMouseZoom","constraint","constrainedRange","range1","range2","valueOf","hasRangeSelected","HORIZONTAL_CLASS","Y_AXIS_LABEL_CLASS","X_AXIS_LABEL_CLASS","DEFAULT_AXIS_LABEL_PADDING","category10","_g","_chartBodyG","_xAxisLabel","_y","_yAxisLabel","_round","_unitCount","_focusChart","axis","orient","_xUnits","_xAxisPadding","_xElasticity","_xAxisLabelPadding","_yAxis","_yAxisPadding","_yElasticity","_yAxisLabelPadding","_brush","brush","_renderHorizontalGridLine","_zoomScale","_zoom","behavior","zoom","_nullZoom","_useRightYAxis","rangeChart","focusChart","zoomScale","extent","zoomOutRestrict","_generateG","gElement","mouseZoomable","chartBodyG","xScale","xOriginalDomain","xUnits","xAxis","xAxisPadding","xUnitCount","useRightYAxis","groups","map","axisXG","axisXLab","xAxisLabel","labelText","yAxisMin","yAxisMax","rangeRound","_renderHorizontalGridLinesForAxis","renderYAxisLabel","axisClass","rotation","labelXPosition","axisYLab","labelYPosition","renderYAxisAt","position","axisYG","axisPosition","_yAxisX","labelPosition","yAxisLabel","yScale","yAxis","renderHorizontalGridLines","yAxisPadding","_filter","_brushing","gBrush","setBrushY","setHandlePaths","resizeHandlePath","extendBrush","brushIsEmpty","rangedFilter","doTransition","clipPadding","_preprocessData","scaleExtent","size","refocused","c","brushOn","stackMixin","prepareValues","layer","layerIdx","valAccessor","accessor","String","values","hidden","domainFilter","xDomain","p","findLayerByName","_stack","flattenStack","valueses","concat","visability","_stackLayout","layout","_titles","_hidableStacks","hidableStacks","hideStack","stackName","showStack","getValueAccessorByIndex","index","y0","titleAccessor","stackLayout","layers","flat","ordered","color","capMixin","_cap","_othersLabel","_othersGrouper","topRows","topRowsSum","sum","allRows","allRowsSum","topKeys","allKeys","topSet","set","others","key","cappedKeyAccessor","cappedValueAccessor","cap","count","othersLabel","othersGrouper","grouperFunction","_onClick","bubbleMixin","_maxBubbleRelativeSize","_minRadiusWithLabel","BUBBLE_NODE_CLASS","BUBBLE_CLASS","MIN_RADIUS","_r","_rValueAccessor","bubbleRadiusScale","radiusValueAccessor","rMin","rMax","bubbleR","isNaN","labelOpacity","_doRenderLabel","bubbleGEnter","doUpdateLabels","labels","_doRenderTitles","doUpdateTitles","minRadius","radius","minRadiusWithLabel","maxBubbleRelativeSize","relativeSize","isSelectedNode","pieChart","_radius","_givenRadius","pieData","arc","buildArcs","pie","pieLayout","_emptyCssClass","_emptyTitle","slices","_sliceCssClass","createElements","updateElements","removeElements","highlightFilter","cx","cy","slicesEnter","createSliceNodes","createSlicePath","createTitles","createLabels","slicePath","fill","safeArc","attrTween","tweenPie","positionLabels","labelsEnter","sliceHasNoData","sliceTooSmall","isSelectedSlice","classes","_externalLabelRadius","updateSlicePaths","updateLabels","updateTitles","slicePaths","outerRadius","_externalRadiusPadding","innerRadius","_innerRadius","sort","angle","endAngle","startAngle","_minAngleForLabel","b","_current","isOffCanvas","t","path","centroid","highlightSliceFromLegendable","legendable","highlighted","_cx","_cy","DEFAULT_MIN_ANGLE_FOR_LABEL","slicesCap","externalRadiusPadding","minAngleForLabel","emptyTitle","externalLabels","barChart","barHeight","renderBars","layerIndex","bars","_centerBar","_barWidth","_gap","calculateBarWidth","numberOfBars","rangeBand","barPadding","MIN_BAR_WIDTH","colorFilter","inv","item","match","DEFAULT_GAP_BETWEEN_BARS","_alwaysUseRounding","_rescale","_render","centerBar","outerPadding","gap","alwaysUseRounding","_xAxisMax","res","lineChart","drawLine","layersEnter","line","_interpolate","tension","_tension","_defined","defined","_dashStyle","safeD","drawArea","_renderArea","area","drawDots","chartBody","xyTipsOn","tooltipListClass","TOOLTIP_G_CLASS","tooltips","points","createRefLines","dots","DOT_CIRCLE_CLASS","getDotRadius","_dataPointFillOpacity","_dataPointStrokeOpacity","dot","showDot","showRefLines","hideDot","hideRefLines","yRefLine","Y_AXIS_REF_LINE_CLASS","xRefLine","X_AXIS_REF_LINE_CLASS","_dotRadius","yAxisX","yAxisRefPathD","xAxisRefPathD","_dataPointRadius","dashstyle","join","DEFAULT_DOT_RADIUS","DEFAULT_DOT_OPACITY","_xyTipsOn","layersList","dashStyle","renderArea","dotRadius","renderDataPoints","fillOpacity","strokeOpacity","_legendables","dataCount","_formatNumber","_html","html","formatNumber","formatter","tot","selected","dataTable","renderGroups","bAllFunctions","_columns","headcols","headGroup","HEAD_CSS_CLASS","_doColumnHeaderFormat","nestEntries","rowGroup","_showGroups","GROUP_CSS_CLASS","LABEL_CSS_CLASS","entries","_order","ascending","_size","nest","sortKeys","_sortBy","renderRows","rows","order","ROW_CSS_CLASS","rowEnter","v","COLUMN_CSS_CLASS","_doColumnValueFormat","_doColumnHeaderFnToString","_doColumnHeaderCapitalize","charAt","toUpperCase","i1","i2","lastIndexOf","substring","i3","columns","sortBy","showGroups","dataGrid","GRID_CSS_CLASS","itemGroup","_htmlGroup","_beginSlice","_endSlice","renderItems","items","ITEM_CSS_CLASS","JSON","stringify","beginSlice","endSlice","htmlGroup","sortByFunction","bubbleChart","renderNodes","bubbleG","bubbleLocator","updateNodes","removeNodes","bubbleX","bubbleY","_elasticRadius","elasticRadius","compositeChart","prepareRightYAxis","rightY","rightYAxisMin","rightYAxisMax","rightYAxis","prepareLeftYAxis","generateChildG","child","SUB_CHART_CLASS","leftYAxisChildren","_children","rightYAxisChildren","getYAxisMin","getYAxisMax","getAllXAxisMinFromChildCharts","getAllXAxisMaxFromChildCharts","_rightY","DEFAULT_RIGHT_Y_AXIS_LABEL_PADDING","_childOptions","_shareColors","_shareTitle","_rightYAxis","_rightYAxisLabel","_rightYAxisLabelPadding","_rightAxisGridLines","__generateG","rightYAxisLabel","useRightAxisGridLines","childOptions","compose","subChartArray","children","shareColors","shareTitle","reduce","j","seriesChart","keySort","clearChart","_charts","resetChildren","keys","_seriesAccessor","_chartFunction","_seriesSort","_valueSort","childrenChanged","keep","nester","sortValues","nesting","sub","subChart","_compose","chartFunction","seriesAccessor","seriesSort","sortFunction","valueSort","geoChoroplethChart","generateLayeredData","isDataLayer","regionG","renderRegionG","renderPaths","groupAll","geoJson","layerSelector","isSelected","isDeselected","layerNameClass","regionClass","baseClasses","getKey","_geoJsons","paths","currentFill","_projectionFlag","_geoPath","geo","states","selectedRegion","overlayGeoJson","json","projection","geoJsons","geoPath","removeGeoJson","bubbleOverlay","initOverlayG","BUBBLE_OVERLAY_CLASS","initializeBubbles","mapData","_points","point","nodeG","getNodeG","circle","bubbleNodeClass","updateBubbles","flag","debugG","debugText","mouse","rowChart","calculateAxisScale","_elasticX","_rowData","drawAxis","axisG","drawGridLines","_rowCssClass","rootValue","_fixedBarHeight","_hasLabelOffsetY","_labelOffsetY","rect","isSelectedRow","translateX","renderTitleLabel","_titleRowCssClass","lab","_labelOffsetX","_dyOffset","titlelab","_titleLabelOffsetX","x0","_renderTitleLabel","rowsCap","fixedBarHeight","labelOffsetX","labelOffsetY","labelOffsety","titleLabelOffsetX","legendItemHeight","_itemHeight","LABEL_GAP","_horizontal","_legendWidth","_itemWidth","_autoItemWidth","itemEnter","clientHeight","_cumulativeLegendTextWidth","row","translateBy","itemWidth","getBBox","itemHeight","horizontal","legendWidth","autoItemWidth","scatterPlot","resizeSymbolsWhere","condition","symbols","oldSize","_symbol","pow","resizeFiltered","symbol","_existenceAccessor","originalKeyAccessor","_locator","_symbolSize","_highlightedSize","_hiddenSize","__filter","existenceAccessor","type","symbolSize","highlightedSize","hiddenSize","ranged2DFilter","numberDisplay","SPAN_CLASS","one","none","valObj","newValue","span","ease","tween","interp","interpolateNumber","lastValue","num","innerHTML","heatMap","filterAxis","cellsOnAxis","unfilteredCellsOnAxis","_chartBody","_cols","_rows","DEFAULT_BORDER_RADIUS","_colOrdering","_rowOrdering","_colScale","_rowScale","_xBorderRadius","_yBorderRadius","_colsLabel","_rowsLabel","colsLabel","rowsLabel","_xAxisOnClick","_yAxisOnClick","_boxOnClick","rowOrdering","cols","colOrdering","rowCount","colCount","boxWidth","boxHeight","rangeRoundBands","boxes","gEnter","boxOnClick","gCols","gColsText","xAxisOnClick","gRows","gRowsText","yAxisOnClick","handler","xBorderRadius","yBorderRadius","boxWhiskers","boxQuartiles","quantile","box","quartileData","quartiles","whiskerIndices","whiskers","whiskerData","outlierIndices","x1","__chart__","center","medianLine","whisker","outlier","Number","tickFormat","boxTick","whiskerTick","timer","flush","boxPlot","DEFAULT_WHISKERS_IQR","k","q1","q3","iqr","renderBoxes","boxesG","boxesGEnter","boxTransform","_box","updateBoxes","removeBoxes","_whiskerIqrFactor","_whiskersIqr","_whiskers","_tickFormat","_boxWidth","innerChartWidth","boxPadding","xOffset","_calculatedBoxWidth","selectMenu","renderOptions","_select","OPTION_CSS_CLASS","onChange","target","selectedOptions","option","_multiple","setAttributes","SELECT_CSS_CLASS","_promptText","_filterDisplayed","property","promptText","filterDisplayed","multiple","abstractBubbleChart","baseChart","capped","colorChart","coordinateGridChart","marginable","stackableChart","define","amd","module","exports","_d3","require","_crossfilter"],"mappings":"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"} \ No newline at end of file