@antv/g2plot
Version:
G2 Plot, a market of plots built with the Grammar of Graphics'
121 lines • 4.03 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var _ = tslib_1.__importStar(require("@antv/util"));
var fecha_1 = tslib_1.__importDefault(require("fecha"));
var SECOND = 1000;
var MINUTE = 60 * SECOND;
var HOUR = 60 * MINUTE;
var DAY = 24 * HOUR;
var MONTH = 31 * DAY;
var YEAR = 365 * DAY;
function datetimeStringAbbrevaite(shape, option, index, cfg) {
var nodes = cfg.nodes.nodes;
var campareText;
if (index === nodes.length - 1) {
campareText = nodes[index - 1].shape.get('origin').text;
}
else {
campareText = nodes[index + 1].shape.get('origin').text;
}
var compare = new Date(campareText);
/** 获取时间周期和时间间隔 */
var text = shape.get('origin').text;
var current = new Date(text);
var startText = nodes[0].shape.get('origin').text;
var start = new Date(startText);
var endText = nodes[nodes.length - 1].shape.get('origin').text;
var end = new Date(endText);
var timeDuration = getDateTimeMode(start, end);
var timeCycle = getDateTimeMode(current, compare); // time frequency
// 如果duration和frequency在同一区间
if (timeDuration === timeCycle) {
if (index !== 0 && index !== nodes.length - 1) {
var formatter = sameSectionFormatter(timeDuration);
shape.attr('text', fecha_1.default.format(current, formatter));
}
return;
}
if (index !== 0) {
var previousText = nodes[index - 1].shape.get('origin').text;
var previous = new Date(previousText);
var isAbbreviate = needAbbrevaite(timeDuration, current, previous);
if (isAbbreviate) {
var formatter = getAbbrevaiteFormatter(timeDuration, timeCycle);
shape.attr('text', fecha_1.default.format(current, formatter));
return;
}
}
}
exports.default = datetimeStringAbbrevaite;
function needAbbrevaite(mode, current, previous) {
var currentStamp = getTime(current, mode);
var previousStamp = getTime(previous, mode);
if (currentStamp !== previousStamp) {
return false;
}
return true;
}
function getDateTimeMode(a, b) {
var mode;
var dist = Math.abs(a - b);
var mapper = {
minute: [MINUTE, HOUR],
hour: [HOUR, DAY],
day: [DAY, MONTH],
month: [MONTH, YEAR],
year: [YEAR, Infinity],
};
_.each(mapper, function (range, key) {
if (dist >= range[0] && dist < range[1]) {
mode = key;
}
});
return mode;
}
function getAbbrevaiteFormatter(duration, cycle) {
var times = ['year', 'month', 'day', 'hour', 'minute'];
var formatters = ['YYYY', 'MM', 'DD', 'HH', 'MM'];
var startIndex = times.indexOf(duration) + 1;
var endIndex = times.indexOf(cycle);
var formatter = '';
for (var i = startIndex; i <= endIndex; i++) {
formatter += formatters[i];
if (i < endIndex) {
formatter += '-';
}
}
return formatter;
}
function sameSectionFormatter(mode) {
var times = ['year', 'month', 'day', 'hour', 'minute'];
var formatters = ['YYYY', 'MM', 'DD', 'HH', 'MM'];
var index = times.indexOf(mode);
var formatter = formatters[index];
return formatter;
}
function getTime(date, mode) {
if (mode === 'year') {
return date.getFullYear();
}
if (mode === 'month') {
return date.getMonth() + 1;
}
if (mode === 'day') {
return date.getDay() + 1;
}
if (mode === 'hour') {
return date.getHours() + 1;
}
if (mode === 'minute') {
return date.getMinutes() + 1;
}
}
/*tslint:disable*/
function isTime(string) {
var hourminExp = /^(?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]$/;
var hourminSecExp = /^(?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/;
return hourminExp.test(string) || hourminSecExp.test(string);
}
exports.isTime = isTime;
//# sourceMappingURL=datetime-string-abbrevaite.js.map