transcend-charts
Version:
Transcend is a charting and graph library for NUVI
165 lines (153 loc) • 5.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
exports.default = {
yAxis: function yAxis(axisHeight, maxValue, minValue, labelFontSize) {
// figure out the nice round numbers to use for the y-value labels
var preferredNumberOfLabels = 5;
if (axisHeight / preferredNumberOfLabels < labelFontSize * 2) {
preferredNumberOfLabels = Math.floor(axisHeight / (labelFontSize * 2));
}
var avgValueBetweenLabels = Math.ceil((maxValue - minValue) / preferredNumberOfLabels);
var roundValues = [0.001, 0.01, 0.02, 0.05, 0.1, 0.25, 0.5, 1, 2, 5, 10, 20, 50, 100, 200, 250, 500, 1000, 2000, 5000, 10000, 20000, 30000, 40000, 50000, 100000, 200000, 250000, 500000, 1000000, 2500000, 5000000, 10000000, 25000000, 50000000, 100000000, 250000000, 500000000, 1000000000];
var computedValueBetweenLabels = undefined;
var computedDifference = undefined;
for (var i = 0; i < roundValues.length; i++) {
var diff = Math.abs(avgValueBetweenLabels - roundValues[i]);
if (computedDifference === undefined || diff < computedDifference || diff === computedDifference && roundValues[i] > computedValueBetweenLabels) {
computedDifference = diff;
computedValueBetweenLabels = roundValues[i];
}
}
var computedNumberOfLabels = Math.ceil((maxValue - minValue) / computedValueBetweenLabels);
return {
numberOfLabels: computedNumberOfLabels,
valueBetweenLabels: computedValueBetweenLabels
};
},
createGuid: function createGuid(length) {
if (!length || length < 1) {
length = 10;
}
var randomChars = 'abcdefghijklmnopqrstuvwxyz0123456789';
var randomGuid = '';
for (var i = 0; i < length; i++) {
randomGuid += randomChars.charAt(Math.floor(Math.random() * randomChars.length));
}
return randomGuid;
},
createDateLabels: function createDateLabels(minTimestamp, maxTimestamp, interval) {
var dateLabels = [];
var roundedMinTimestamp = this.roundStartDateByInterval(minTimestamp, interval);
var roundedMaxTimestamp = this.roundEndDateByInterval(maxTimestamp, interval);
var movingDate = new Date(roundedMinTimestamp);
while (movingDate.getTime() <= roundedMaxTimestamp) {
// push tmp onto the dateLabels array
var date = null;
var formattedDate = '';
switch (interval) {
case 'second':
date = movingDate.getTime();
formattedDate = (0, _moment2.default)(movingDate).format('h:mm:ssa');
movingDate.setSeconds(movingDate.getSeconds() + 1);
break;
case 'minute':
date = movingDate.getTime();
formattedDate = (0, _moment2.default)(movingDate).format('h:mma');
movingDate.setMinutes(movingDate.getMinutes() + 1);
break;
case 'hour':
date = movingDate.getTime();
formattedDate = (0, _moment2.default)(movingDate).format('h:00a');
movingDate.setHours(movingDate.getHours() + 1);
break;
case 'day':
default:
date = movingDate.getTime();
formattedDate = (0, _moment2.default)(movingDate).format('MMM D');
movingDate.setDate(movingDate.getDate() + 1);
break;
case 'month':
date = movingDate.getTime();
formattedDate = (0, _moment2.default)(movingDate).format('MMM');
movingDate.setMonth(movingDate.getMonth() + 1);
break;
case 'year':
date = movingDate.getTime();
formattedDate = (0, _moment2.default)(movingDate).format('YYYY');
movingDate.setYear(movingDate.getFullYear() + 1);
break;
}
dateLabels.push({
date: date,
datestr: formattedDate
});
}
return dateLabels;
},
roundStartDateByInterval: function roundStartDateByInterval(timestamp, interval) {
var date = new Date(timestamp);
switch (interval) {
case 'year':
date.setMonth(0);
case 'month':
date.setDate(1);
case 'day':
date.setHours(0);
case 'hour':
date.setMinutes(0);
case 'minute':
date.setSeconds(0);
case 'second':
default:
date.setMilliseconds(0);
break;
}
return date.getTime();
},
roundEndDateByInterval: function roundEndDateByInterval(timestamp, interval) {
var date = new Date(timestamp);
switch (interval) {
case 'year':
date.setYear(date.getFullYear() + 1);
date.setMonth(0);
date.setDate(0);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
break;
case 'month':
date.setMonth(date.getMonth() + 1);
date.setDate(0);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
break;
case 'day':
date.setDate(date.getDate() + 1);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
break;
case 'hour':
date.setHours(date.getHours() + 1);
date.setMinutes(0);
date.setSeconds(0);
break;
case 'minute':
date.setMinutes(date.getMinutes() + 1);
date.setSeconds(0);
break;
case 'second':
default:
date.setSeconds(date.getSeconds() + 1);
break;
}
date.setMilliseconds(0);
return date.getTime();
}
};