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

95 lines (75 loc) 2.98 kB
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(); } }; }); });