117 lines
2.1 KiB
JavaScript
117 lines
2.1 KiB
JavaScript
|
var _ = require('underscore');
|
||
|
var d3 = require('d3');
|
||
|
var moment = require('moment');
|
||
|
|
||
|
var AGGREGATION_FORMATS = {
|
||
|
second: {
|
||
|
display: 'HH:mm:ss',
|
||
|
unit: 's'
|
||
|
},
|
||
|
minute: {
|
||
|
display: 'HH:mm - MMM Do, YYYY',
|
||
|
unit: 'm'
|
||
|
},
|
||
|
hour: {
|
||
|
display: 'HH:00 - MMM Do, YYYY',
|
||
|
unit: 'h'
|
||
|
},
|
||
|
day: {
|
||
|
display: 'MMM Do, YYYY',
|
||
|
unit: 'd'
|
||
|
},
|
||
|
week: {
|
||
|
display: 'MMM Do, YYYY',
|
||
|
unit: 'w'
|
||
|
},
|
||
|
month: {
|
||
|
display: 'MMM YYYY',
|
||
|
unit: 'M'
|
||
|
},
|
||
|
quarter: {
|
||
|
display: '[Q]Q YYYY',
|
||
|
unit: 'Q'
|
||
|
},
|
||
|
year: {
|
||
|
display: 'YYYY',
|
||
|
unit: 'y'
|
||
|
},
|
||
|
decade: {
|
||
|
display: 'YYYY',
|
||
|
unit: 'y'
|
||
|
}
|
||
|
};
|
||
|
|
||
|
var format = {};
|
||
|
|
||
|
format.formatNumber = function (value, unit) {
|
||
|
if (!_.isNumber(value) || value === 0) {
|
||
|
return value;
|
||
|
}
|
||
|
|
||
|
var format = d3.format('.2s');
|
||
|
var p = 0;
|
||
|
var absV = Math.abs(value);
|
||
|
|
||
|
if (value > 1000) {
|
||
|
value = format(value) + (unit ? ' ' + unit : '');
|
||
|
return value;
|
||
|
}
|
||
|
|
||
|
if (absV > 100) {
|
||
|
p = 0;
|
||
|
} else if (absV > 10) {
|
||
|
p = 1;
|
||
|
} else if (absV > 1) {
|
||
|
p = 2;
|
||
|
} else if (absV > 0) {
|
||
|
p = Math.max(Math.ceil(Math.abs(Math.log(absV) / Math.log(10))) + 2, 3);
|
||
|
}
|
||
|
|
||
|
value = value.toFixed(p);
|
||
|
var m = value.match(/(\.0+)$/);
|
||
|
if (m) {
|
||
|
value = value.replace(m[0], '');
|
||
|
}
|
||
|
|
||
|
return value;
|
||
|
};
|
||
|
|
||
|
format.formatDate = function (value) {
|
||
|
return d3.time.format('%Y-%m-%d')(value);
|
||
|
};
|
||
|
|
||
|
format.formatTime = function (value) {
|
||
|
return d3.time.format('%H:%M:%S %d/%m/%Y')(value);
|
||
|
};
|
||
|
|
||
|
format.timeFactory = function (format) {
|
||
|
return d3.time.format(format);
|
||
|
};
|
||
|
|
||
|
format.formatValue = function (value) {
|
||
|
if (_.isNumber(value)) {
|
||
|
return format.formatNumber(value);
|
||
|
}
|
||
|
if (_.isDate(value)) {
|
||
|
return format.formatDate(value);
|
||
|
}
|
||
|
return value;
|
||
|
};
|
||
|
|
||
|
format.timestampFactory = function (aggregation, offset) {
|
||
|
return function (timestamp) {
|
||
|
if (!_.has(AGGREGATION_FORMATS, aggregation)) {
|
||
|
return '-';
|
||
|
}
|
||
|
var format = AGGREGATION_FORMATS[aggregation];
|
||
|
var date = moment.unix(timestamp).utc();
|
||
|
if (_.isFinite(offset)) {
|
||
|
date.utcOffset(offset / 60);
|
||
|
}
|
||
|
var formatted = date.format(format.display);
|
||
|
return formatted;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
module.exports = format;
|