UNPKG

@d3fc/d3fc-extent

Version:

Extends the d3 extent functionality to allow multiple accessors, padding and date support

216 lines (171 loc) 5.84 kB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array')) : typeof define === 'function' && define.amd ? define(['exports', 'd3-array'], factory) : (global = global || self, factory(global.fc = global.fc || {}, global.d3)); }(this, function (exports, d3Array) { 'use strict'; function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function linearExtent () { var accessors = [function (d) { return d; }]; var pad = [0, 0]; var padUnit = 'percent'; var symmetricalAbout = null; var include = []; var instance = function instance(data) { var values = new Array(data.length); for (var _i = 0, _accessors = accessors; _i < _accessors.length; _i++) { var accessor = _accessors[_i]; for (var i = 0; i < data.length; i++) { var value = accessor(data[i], i); if (Array.isArray(value)) { values.push.apply(values, _toConsumableArray(value)); } else { values.push(value); } } } var extent = [d3Array.min(values), d3Array.max(values)]; extent[0] = extent[0] == null ? d3Array.min(include) : d3Array.min([extent[0]].concat(_toConsumableArray(include))); extent[1] = extent[1] == null ? d3Array.max(include) : d3Array.max([extent[1]].concat(_toConsumableArray(include))); if (symmetricalAbout != null) { var halfRange = Math.max(Math.abs(extent[1] - symmetricalAbout), Math.abs(extent[0] - symmetricalAbout)); extent[0] = symmetricalAbout - halfRange; extent[1] = symmetricalAbout + halfRange; } switch (padUnit) { case 'domain': { extent[0] -= pad[0]; extent[1] += pad[1]; break; } case 'percent': { var delta = extent[1] - extent[0]; extent[0] -= pad[0] * delta; extent[1] += pad[1] * delta; break; } default: throw new Error("Unknown padUnit: ".concat(padUnit)); } return extent; }; instance.accessors = function () { if (!arguments.length) { return accessors; } accessors = arguments.length <= 0 ? undefined : arguments[0]; return instance; }; instance.pad = function () { if (!arguments.length) { return pad; } pad = arguments.length <= 0 ? undefined : arguments[0]; return instance; }; instance.padUnit = function () { if (!arguments.length) { return padUnit; } padUnit = arguments.length <= 0 ? undefined : arguments[0]; return instance; }; instance.include = function () { if (!arguments.length) { return include; } include = arguments.length <= 0 ? undefined : arguments[0]; return instance; }; instance.symmetricalAbout = function () { if (!arguments.length) { return symmetricalAbout; } symmetricalAbout = arguments.length <= 0 ? undefined : arguments[0]; return instance; }; return instance; } function time () { var accessors = []; var pad = [0, 0]; var padUnit = 'percent'; var symmetricalAbout = null; var include = []; var extent = linearExtent(); var valueOf = function valueOf(date) { return date != null ? date.valueOf() : null; }; var instance = function instance(data) { var adaptedAccessors = accessors.map(function (accessor) { return function () { var value = accessor.apply(void 0, arguments); return Array.isArray(value) ? value.map(valueOf) : valueOf(value); }; }); extent.accessors(adaptedAccessors).pad(pad).padUnit(padUnit).symmetricalAbout(symmetricalAbout != null ? symmetricalAbout.valueOf() : null).include(include.map(function (date) { return date.valueOf(); })); return extent(data).map(function (value) { return new Date(value); }); }; instance.accessors = function () { if (!arguments.length) { return accessors; } accessors = arguments.length <= 0 ? undefined : arguments[0]; return instance; }; instance.pad = function () { if (!arguments.length) { return pad; } pad = arguments.length <= 0 ? undefined : arguments[0]; return instance; }; instance.padUnit = function () { if (!arguments.length) { return padUnit; } padUnit = arguments.length <= 0 ? undefined : arguments[0]; return instance; }; instance.include = function () { if (!arguments.length) { return include; } include = arguments.length <= 0 ? undefined : arguments[0]; return instance; }; instance.symmetricalAbout = function () { if (!arguments.length) { return symmetricalAbout; } symmetricalAbout = arguments.length <= 0 ? undefined : arguments[0]; return instance; }; return instance; } exports.extentDate = time; exports.extentLinear = linearExtent; exports.extentTime = time; Object.defineProperty(exports, '__esModule', { value: true }); }));