@d3fc/d3fc-extent
Version:
Extends the d3 extent functionality to allow multiple accessors, padding and date support
216 lines (171 loc) • 5.84 kB
JavaScript
(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 });
}));