UNPKG

@spalger/kibana

Version:

Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic

76 lines (67 loc) 2.56 kB
define(function (require) { var module = require('ui/modules').get('kibana'); var _ = require('lodash'); var dateMath = require('ui/utils/dateMath'); var moment = require('moment'); require('ui/timepicker/quick_ranges'); require('ui/timepicker/time_units'); module.directive('prettyDuration', function (config, quickRanges, timeUnits) { return { restrict: 'E', scope: { from: '=', to: '=' }, link: function ($scope, $elem) { var dateFormat = config.get('dateFormat'); var lookupByRange = {}; _.each(quickRanges, function (frame) { lookupByRange[frame.from + ' to ' + frame.to] = frame; }); function stringify() { var text; // If both parts are date math, try to look up a reasonable string if ($scope.from && $scope.to && !moment.isMoment($scope.from) && !moment.isMoment($scope.to)) { var tryLookup = lookupByRange[$scope.from.toString() + ' to ' + $scope.to.toString()]; if (tryLookup) { $elem.text(tryLookup.display); } else { var fromParts = $scope.from.toString().split('-'); if ($scope.to.toString() === 'now' && fromParts[0] === 'now' && fromParts[1]) { var rounded = fromParts[1].split('/'); text = 'Last ' + rounded[0]; if (rounded[1]) { text = text + ' rounded to the ' + timeUnits[rounded[1]]; } $elem.text(text); } else { cantLookup(); } } // If at least one part is a moment, try to make pretty strings by parsing date math } else { cantLookup(); } }; function cantLookup() { var display = {}; _.each(['from', 'to'], function (time) { if (moment.isMoment($scope[time])) { display[time] = $scope[time].format(dateFormat); } else { if ($scope[time] === 'now') { display[time] = 'now'; } else { var tryParse = dateMath.parse($scope[time], time === 'to' ? true : false); display[time] = moment.isMoment(tryParse) ? '~ ' + tryParse.fromNow() : $scope[time]; } } }); $elem.text(display.from + ' to ' + display.to); }; $scope.$watch('from', stringify); $scope.$watch('to', stringify); } }; }); });