Files
wakapi-readme-stats/node_modules/vega-format/build/vega-format.js
2020-07-28 00:48:25 +05:30

240 lines
7.6 KiB
JavaScript

(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array'), require('d3-format'), require('vega-time'), require('vega-util'), require('d3-time-format')) :
typeof define === 'function' && define.amd ? define(['exports', 'd3-array', 'd3-format', 'vega-time', 'vega-util', 'd3-time-format'], factory) :
(global = global || self, factory(global.vega = {}, global.d3, global.d3, global.vega, global.vega, global.d3));
}(this, (function (exports, d3Array, d3Format, vegaTime, vegaUtil, d3TimeFormat) { 'use strict';
function memoize(method) {
const cache = {};
return spec => cache[spec] || (cache[spec] = method(spec));
}
function trimZeroes(numberFormat, decimalChar) {
return x => {
var str = numberFormat(x),
dec = str.indexOf(decimalChar),
idx, end;
if (dec < 0) return str;
idx = rightmostDigit(str, dec);
end = idx < str.length ? str.slice(idx) : '';
while (--idx > dec) if (str[idx] !== '0') { ++idx; break; }
return str.slice(0, idx) + end;
};
}
function rightmostDigit(str, dec) {
var i = str.lastIndexOf('e'), c;
if (i > 0) return i;
for (i=str.length; --i > dec;) {
c = str.charCodeAt(i);
if (c >= 48 && c <= 57) return i + 1; // is digit
}
}
function numberLocale(locale) {
const format = memoize(locale.format),
formatPrefix = locale.formatPrefix;
return {
format,
formatPrefix,
formatFloat(spec) {
var s = d3Format.formatSpecifier(spec || ',');
if (s.precision == null) {
s.precision = 12;
switch (s.type) {
case '%': s.precision -= 2; break;
case 'e': s.precision -= 1; break;
}
return trimZeroes(
format(s), // number format
format('.1f')(1)[1] // decimal point character
);
} else {
return format(s);
}
},
formatSpan(start, stop, count, specifier) {
specifier = d3Format.formatSpecifier(specifier == null ? ',f' : specifier);
const step = d3Array.tickStep(start, stop, count),
value = Math.max(Math.abs(start), Math.abs(stop));
let precision;
if (specifier.precision == null) {
switch (specifier.type) {
case 's': {
if (!isNaN(precision = d3Format.precisionPrefix(step, value))) {
specifier.precision = precision;
}
return formatPrefix(specifier, value);
}
case '':
case 'e':
case 'g':
case 'p':
case 'r': {
if (!isNaN(precision = d3Format.precisionRound(step, value))) {
specifier.precision = precision - (specifier.type === 'e');
}
break;
}
case 'f':
case '%': {
if (!isNaN(precision = d3Format.precisionFixed(step))) {
specifier.precision = precision - (specifier.type === '%') * 2;
}
break;
}
}
}
return format(specifier);
}
};
}
let defaultNumberLocale;
resetNumberFormatDefaultLocale();
function resetNumberFormatDefaultLocale() {
return defaultNumberLocale = numberLocale({
format: d3Format.format,
formatPrefix: d3Format.formatPrefix
});
}
function numberFormatLocale(definition) {
return numberLocale(d3Format.formatLocale(definition));
}
function numberFormatDefaultLocale(definition) {
return arguments.length
? (defaultNumberLocale = numberFormatLocale(definition))
: defaultNumberLocale;
}
function timeMultiFormat(format, interval, spec) {
spec = spec || {};
if (!vegaUtil.isObject(spec)) {
vegaUtil.error(`Invalid time multi-format specifier: ${spec}`);
}
const second = interval(vegaTime.SECONDS),
minute = interval(vegaTime.MINUTES),
hour = interval(vegaTime.HOURS),
day = interval(vegaTime.DATE),
week = interval(vegaTime.WEEK),
month = interval(vegaTime.MONTH),
quarter = interval(vegaTime.QUARTER),
year = interval(vegaTime.YEAR),
L = format(spec[vegaTime.MILLISECONDS] || '.%L'),
S = format(spec[vegaTime.SECONDS] || ':%S'),
M = format(spec[vegaTime.MINUTES] || '%I:%M'),
H = format(spec[vegaTime.HOURS] || '%I %p'),
d = format(spec[vegaTime.DATE] || spec[vegaTime.DAY] || '%a %d'),
w = format(spec[vegaTime.WEEK] || '%b %d'),
m = format(spec[vegaTime.MONTH] || '%B'),
q = format(spec[vegaTime.QUARTER] || '%B'),
y = format(spec[vegaTime.YEAR] || '%Y');
return date => (
second(date) < date ? L :
minute(date) < date ? S :
hour(date) < date ? M :
day(date) < date ? H :
month(date) < date ? (week(date) < date ? d : w) :
year(date) < date ? (quarter(date) < date ? m : q) :
y)(date);
}
function timeLocale(locale) {
const timeFormat = memoize(locale.format),
utcFormat = memoize(locale.utcFormat);
return {
timeFormat: spec => vegaUtil.isString(spec)
? timeFormat(spec)
: timeMultiFormat(timeFormat, vegaTime.timeInterval, spec),
utcFormat: spec => vegaUtil.isString(spec)
? utcFormat(spec)
: timeMultiFormat(utcFormat, vegaTime.utcInterval, spec),
timeParse: memoize(locale.parse),
utcParse: memoize(locale.utcParse)
};
}
let defaultTimeLocale;
resetTimeFormatDefaultLocale();
function resetTimeFormatDefaultLocale() {
return defaultTimeLocale = timeLocale({
format: d3TimeFormat.timeFormat,
parse: d3TimeFormat.timeParse,
utcFormat: d3TimeFormat.utcFormat,
utcParse: d3TimeFormat.utcParse
});
}
function timeFormatLocale(definition) {
return timeLocale(d3TimeFormat.timeFormatLocale(definition));
}
function timeFormatDefaultLocale(definition) {
return arguments.length
? (defaultTimeLocale = timeFormatLocale(definition))
: defaultTimeLocale;
}
const createLocale = (number, time) => vegaUtil.extend({}, number, time);
function locale(numberSpec, timeSpec) {
const number = numberSpec
? numberFormatLocale(numberSpec)
: numberFormatDefaultLocale();
const time = timeSpec
? timeFormatLocale(timeSpec)
: timeFormatDefaultLocale();
return createLocale(number, time);
}
function defaultLocale(numberSpec, timeSpec) {
const args = arguments.length;
if (args && args !== 2) {
vegaUtil.error('defaultLocale expects either zero or two arguments.');
}
return args
? createLocale(
numberFormatDefaultLocale(numberSpec),
timeFormatDefaultLocale(timeSpec)
)
: createLocale(
numberFormatDefaultLocale(),
timeFormatDefaultLocale()
);
}
function resetDefaultLocale() {
resetNumberFormatDefaultLocale();
resetTimeFormatDefaultLocale();
return defaultLocale();
}
exports.defaultLocale = defaultLocale;
exports.locale = locale;
exports.numberFormatDefaultLocale = numberFormatDefaultLocale;
exports.numberFormatLocale = numberFormatLocale;
exports.resetDefaultLocale = resetDefaultLocale;
exports.resetNumberFormatDefaultLocale = resetNumberFormatDefaultLocale;
exports.resetTimeFormatDefaultLocale = resetTimeFormatDefaultLocale;
exports.timeFormatDefaultLocale = timeFormatDefaultLocale;
exports.timeFormatLocale = timeFormatLocale;
Object.defineProperty(exports, '__esModule', { value: true });
})));