UNPKG

transcend-charts

Version:

Transcend is a charting and graph library for NUVI

165 lines (153 loc) 5.58 kB
'use strict'; 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(); } };