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

101 lines (85 loc) 3.14 kB
define(function (require) { require('ui/paginated_table'); require('ui/compile_recursive_directive'); require('ui/agg_table/agg_table.less'); require('ui/modules') .get('kibana') .directive('kbnAggTable', function ($filter, config, Private, compileRecursiveDirective) { var _ = require('lodash'); return { restrict: 'E', template: require('ui/agg_table/agg_table.html'), scope: { table: '=', perPage: '=?' }, controllerAs: 'aggTable', compile: function ($el) { // Use the compile function from the RecursionHelper, // And return the linking function(s) which it returns return compileRecursiveDirective.compile($el); }, controller: function ($scope) { var self = this; self.sort = null; self._saveAs = require('@spalger/filesaver').saveAs; self.csv = { separator: config.get('csv:separator'), quoteValues: config.get('csv:quoteValues') }; self.exportAsCsv = function (formatted) { var csv = new Blob([self.toCsv(formatted)], { type: 'text/plain' }); self._saveAs(csv, self.csv.filename); }; self.toCsv = function (formatted) { var rows = $scope.table.rows; var columns = formatted ? $scope.formattedColumns : $scope.table.columns; var nonAlphaNumRE = /[^a-zA-Z0-9]/; var allDoubleQuoteRE = /"/g; function escape(val) { if (!formatted && _.isObject(val)) val = val.valueOf(); val = String(val); if (self.csv.quoteValues && nonAlphaNumRE.test(val)) { val = '"' + val.replace(allDoubleQuoteRE, '""') + '"'; } return val; } // escape each cell in each row var csvRows = rows.map(function (row) { return row.map(escape); }); // add the columns to the rows csvRows.unshift(columns.map(function (col) { return escape(col.title); })); return csvRows.map(function (row) { return row.join(self.csv.separator) + '\r\n'; }).join(''); }; $scope.$watch('table', function () { var table = $scope.table; if (!table) { $scope.rows = null; $scope.formattedColumns = null; return; } self.csv.filename = (table.title() || 'table') + '.csv'; $scope.rows = table.rows; $scope.formattedColumns = table.columns.map(function (col, i) { var agg = $scope.table.aggConfig(col); var field = agg.field(); var formattedColumn = { title: col.title, filterable: field && field.filterable && agg.schema.group === 'buckets' }; var last = i === (table.columns.length - 1); if (last || (agg.schema.group === 'metrics')) { formattedColumn.class = 'visualize-table-right'; } return formattedColumn; }); }); } }; }); });