@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
95 lines (75 loc) • 2.98 kB
JavaScript
define(function (require) {
var $ = require('jquery');
var app = require('ui/modules').get('apps/discover');
var html = require('plugins/kibana/discover/components/field_chooser/discover_field.html');
var _ = require('lodash');
require('ui/directives/css_truncate');
require('ui/directives/field_name');
app.directive('discoverField', function ($compile) {
return {
restrict: 'E',
template: html,
replace: true,
link: function ($scope, $elem) {
var detailsElem;
var detailScope = $scope.$new();
var detailsHtml = require('plugins/kibana/discover/components/field_chooser/lib/detail_views/string.html');
var init = function () {
if ($scope.field.details) {
$scope.toggleDetails($scope.field, true);
}
};
var getWarnings = function (field) {
var warnings = [];
if (!field.scripted) {
if (!field.doc_values && !(field.analyzed && field.type === 'string')) {
warnings.push('Doc values are not enabled on this field. This may lead to excess heap consumption when visualizing.');
}
if (field.analyzed && field.type === 'string') {
warnings.push('This is an analyzed string field.' +
' Analyzed strings are highly unique and can use a lot of memory to visualize.' +
' Values such as foo-bar will be broken into foo and bar.');
}
if (!field.indexed) {
warnings.push('This field is not indexed and can not be visualized.');
}
}
if (field.scripted) {
warnings.push('Scripted fields can take a long time to execute.');
}
if (warnings.length > 1) {
warnings = warnings.map(function (warning, i) {
return (i > 0 ? '\n' : '') + (i + 1) + ' - ' + warning;
});
}
return warnings;
};
$scope.toggleDisplay = function (field) {
// inheritted param to fieldChooser
$scope.toggle(field.name);
if (field.display) $scope.increaseFieldCounter(field);
// we are now displaying the field, kill it's details
if (field.details) {
$scope.toggleDetails(field);
}
};
$scope.toggleDetails = function (field, recompute) {
if (_.isUndefined(field.details) || recompute) {
// This is inherited from fieldChooser
$scope.details(field, recompute);
detailScope.$destroy();
detailScope = $scope.$new();
detailScope.warnings = getWarnings(field);
detailsElem = $(detailsHtml);
$compile(detailsElem)(detailScope);
$elem.append(detailsElem);
} else {
delete field.details;
detailsElem.remove();
}
};
init();
}
};
});
});