kibana-sinatra 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -1
  3. data/lib/kibana/assets/app/app.js +4 -2
  4. data/lib/kibana/assets/app/components/kbn.js +114 -0
  5. data/lib/kibana/assets/app/components/require.config.js +5 -1
  6. data/lib/kibana/assets/app/controllers/dash.js +30 -2
  7. data/lib/kibana/assets/app/controllers/row.js +33 -0
  8. data/lib/kibana/assets/app/dashboards/blank.json +0 -11
  9. data/lib/kibana/assets/app/dashboards/default.json +0 -11
  10. data/lib/kibana/assets/app/dashboards/guided.json +0 -11
  11. data/lib/kibana/assets/app/dashboards/logstash.json +0 -6
  12. data/lib/kibana/assets/app/dashboards/noted.json +0 -11
  13. data/lib/kibana/assets/app/directives/addPanel.js +1 -1
  14. data/lib/kibana/assets/app/directives/kibanaPanel.js +3 -2
  15. data/lib/kibana/assets/app/directives/kibanaSimplePanel.js +3 -3
  16. data/lib/kibana/assets/app/panels/bettermap/module.js +52 -17
  17. data/lib/kibana/assets/app/panels/column/module.js +18 -8
  18. data/lib/kibana/assets/app/panels/histogram/editor.html +3 -0
  19. data/lib/kibana/assets/app/panels/histogram/module.html +1 -1
  20. data/lib/kibana/assets/app/panels/histogram/module.js +179 -49
  21. data/lib/kibana/assets/app/panels/histogram/styleEditor.html +4 -0
  22. data/lib/kibana/assets/app/panels/hits/module.js +46 -18
  23. data/lib/kibana/assets/app/panels/map/module.js +40 -21
  24. data/lib/kibana/assets/app/panels/pie/module.html +3 -0
  25. data/lib/kibana/assets/app/panels/pie/module.js +62 -25
  26. data/lib/kibana/assets/app/panels/sparklines/module.js +42 -35
  27. data/lib/kibana/assets/app/panels/table/editor.html +2 -2
  28. data/lib/kibana/assets/app/panels/table/module.html +24 -19
  29. data/lib/kibana/assets/app/panels/table/module.js +80 -29
  30. data/lib/kibana/assets/app/panels/terms/module.html +3 -0
  31. data/lib/kibana/assets/app/panels/terms/module.js +65 -17
  32. data/lib/kibana/assets/app/panels/text/module.js +21 -9
  33. data/lib/kibana/assets/app/panels/trends/module.js +34 -13
  34. data/lib/kibana/assets/app/partials/dasheditor.html +1 -1
  35. data/lib/kibana/assets/app/services/dashboard.js +14 -14
  36. data/lib/kibana/assets/app/services/fields.js +11 -8
  37. data/lib/kibana/assets/app/services/filterSrv.js +27 -17
  38. data/lib/kibana/assets/app/services/querySrv.js +14 -15
  39. data/lib/kibana/assets/css/bootstrap.dark.min.css +1 -1
  40. data/lib/kibana/assets/css/bootstrap.light.min.css +1 -1
  41. data/lib/kibana/assets/index.html +1 -1
  42. data/lib/kibana/assets/vendor/angular/angular-strap.js +6 -3
  43. data/lib/kibana/assets/vendor/angular/bindonce.js +269 -0
  44. data/lib/kibana/assets/vendor/bootstrap/less/overrides.less +6 -0
  45. data/lib/kibana/assets/vendor/elasticjs/elastic-angular-client.js +37 -24
  46. data/lib/kibana/assets/vendor/elasticjs/elastic.js +4694 -2419
  47. data/lib/kibana/assets/vendor/jquery/jquery.flot.byte.js +107 -0
  48. data/lib/kibana/sinatra/version.rb +1 -1
  49. data/lib/kibana/views/config.erb +19 -16
  50. metadata +4 -2
@@ -29,6 +29,10 @@
29
29
  <label class="small">Point Radius</label>
30
30
  <select class="input-mini" ng-model="panel.pointradius" ng-options="f for f in [1,2,3,4,5,6,7,8,9,10]"></select>
31
31
  </div>
32
+ <div class="editor-option">
33
+ <label class="small">Y Format <tip>Y-axis formatting</tip></label>
34
+ <select class="input-small" ng-model="panel.y_format" ng-options="f for f in ['none','short','bytes']"></select>
35
+ </div>
32
36
  </div>
33
37
  <div class="section">
34
38
  <h5>Multiple Series</h5>
@@ -1,16 +1,15 @@
1
- /*
2
-
3
- ## Hits
4
-
5
- ### Parameters
6
- * style :: A hash of css styles
7
- * arrangement :: How should I arrange the query results? 'horizontal' or 'vertical'
8
- * chart :: Show a chart? 'none', 'bar', 'pie'
9
- * donut :: Only applies to 'pie' charts. Punches a hole in the chart for some reason
10
- * tilt :: Only 'pie' charts. Janky 3D effect. Looks terrible 90% of the time.
11
- * lables :: Only 'pie' charts. Labels on the pie?
12
-
13
- */
1
+ /** @scratch /panels/5
2
+ * include::panels/hits.asciidoc[]
3
+ */
4
+
5
+ /** @scratch /panels/hits/0
6
+ * == Hits
7
+ * Status: *Stable*
8
+ *
9
+ * The hits panel displays the number of hits for each of the queries on the dashboard in a
10
+ * configurable format specified by the `chart' property.
11
+ *
12
+ */
14
13
  define([
15
14
  'angular',
16
15
  'app',
@@ -46,18 +45,47 @@ define([
46
45
 
47
46
  // Set and populate defaults
48
47
  var _d = {
49
- queries : {
50
- mode : 'all',
51
- ids : []
52
- },
53
48
  style : { "font-size": '10pt'},
49
+ /** @scratch /panels/hits/3
50
+ * === Parameters
51
+ *
52
+ * arrangement:: The arrangement of the legend. horizontal or vertical
53
+ */
54
54
  arrangement : 'horizontal',
55
+ /** @scratch /panels/hits/3
56
+ * chart:: bar, pie or none
57
+ */
55
58
  chart : 'bar',
59
+ /** @scratch /panels/hits/3
60
+ * counter_pos:: The position of the legend, above or below
61
+ */
56
62
  counter_pos : 'above',
63
+ /** @scratch /panels/hits/3
64
+ * donut:: If the chart is set to pie, setting donut to true will draw a hole in the midle of it
65
+ */
57
66
  donut : false,
67
+ /** @scratch /panels/hits/3
68
+ * tilt:: If the chart is set to pie, setting tilt to true will tilt it back into an oval
69
+ */
58
70
  tilt : false,
71
+ /** @scratch /panels/hits/3
72
+ * labels:: If the chart is set to pie, setting labels to true will draw labels in the slices
73
+ */
59
74
  labels : true,
60
- spyable : true
75
+ /** @scratch /panels/hits/3
76
+ * spyable:: Setting spyable to false disables the inspect icon.
77
+ */
78
+ spyable : true,
79
+ /** @scratch /panels/hits/5
80
+ * ==== Queries
81
+ * queries object:: This object describes the queries to use on this panel.
82
+ * queries.mode::: Of the queries available, which to use. Options: +all, pinned, unpinned, selected+
83
+ * queries.ids::: In +selected+ mode, which query ids are selected.
84
+ */
85
+ queries : {
86
+ mode : 'all',
87
+ ids : []
88
+ },
61
89
  };
62
90
  _.defaults($scope.panel,_d);
63
91
 
@@ -1,19 +1,15 @@
1
- /*
2
-
3
- ## Map
4
-
5
- ### Parameters
6
- * map :: 'world', 'us' or 'europe'
7
- * colors :: an array of colors to use for the regions of the map. If this is a 2
8
- element array, jquerymap will generate shades between these colors
9
- * size :: How big to make the facet. Higher = more countries
10
- * exclude :: Exlude the array of counties
11
- * spyable :: Show the 'eye' icon that reveals the last ES query
12
- * index_limit :: This does nothing yet. Eventually will limit the query to the first
13
- N indices
14
-
15
- */
16
-
1
+ /** @scratch /panels/5
2
+ * include::panels/map.asciidoc[]
3
+ */
4
+
5
+ /** @scratch /panels/map/0
6
+ * == Map
7
+ * Status: *Stable*
8
+ *
9
+ * The map panel translates 2 letter country or state codes into shaded regions on a map. Currently
10
+ * available maps are world, usa and europe.
11
+ *
12
+ */
17
13
  define([
18
14
  'angular',
19
15
  'app',
@@ -49,16 +45,39 @@ function (angular, app, _, $) {
49
45
 
50
46
  // Set and populate defaults
51
47
  var _d = {
52
- queries : {
53
- mode : 'all',
54
- ids : []
55
- },
48
+ /** @scratch /panels/map/3
49
+ * === Parameters
50
+ *
51
+ * map:: Map to display. world, usa, europe
52
+ */
56
53
  map : "world",
54
+ /** @scratch /panels/map/3
55
+ * colors:: An array of colors to use to shade the map. If 2 colors are specified, shades
56
+ * between them will be used. For example [`#A0E2E2', `#265656']
57
+ */
57
58
  colors : ['#A0E2E2', '#265656'],
59
+ /** @scratch /panels/map/3
60
+ * size:: Max number of regions to shade
61
+ */
58
62
  size : 100,
63
+ /** @scratch /panels/map/3
64
+ * exclude:: exclude this array of regions. For example [`US',`BR',`IN']
65
+ */
59
66
  exclude : [],
67
+ /** @scratch /panels/map/3
68
+ * spyable:: Setting spyable to false disables the inspect icon.
69
+ */
60
70
  spyable : true,
61
- index_limit : 0
71
+ /** @scratch /panels/map/5
72
+ * ==== Queries
73
+ * queries object:: This object describes the queries to use on this panel.
74
+ * queries.mode::: Of the queries available, which to use. Options: +all, pinned, unpinned, selected+
75
+ * queries.ids::: In +selected+ mode, which query ids are selected.
76
+ */
77
+ queries : {
78
+ mode : 'all',
79
+ ids : []
80
+ }
62
81
  };
63
82
  _.defaults($scope.panel,_d);
64
83
 
@@ -1,4 +1,7 @@
1
1
  <div ng-controller='pie' ng-init="init()">
2
+ <style>
3
+ .pieLabel { pointer-events: none }
4
+ </style>
2
5
  <div ng-show="panel.legend == 'above'" ng-repeat="query in legend" style="float:left;padding-left: 10px;">
3
6
  <span ng-show="panel.chart != 'none'"><i class="icon-circle" ng-style="{color:query.color}"></i></span><span class="small"> {{query.label}} ({{query.data[0][1]}}) </span></span>
4
7
  </div><br>
@@ -1,21 +1,15 @@
1
- /*
2
-
3
- ## Pie
4
-
5
- ### Parameters
6
- * query :: An object with 2 possible parameters depends on the mode:
7
- ** field: Fields to run a terms facet on. Only does anything in terms mode
8
- ** goal: How many to shoot for, only does anything in goal mode
9
- * exclude :: In terms mode, ignore these terms
10
- * donut :: Drill a big hole in the pie
11
- * tilt :: A janky 3D representation of the pie. Looks terrible 90% of the time.
12
- * legend :: Show the legend?
13
- * labels :: Label the slices of the pie?
14
- * mode :: 'terms' or 'goal'
15
- * default_field :: LOL wat? A dumb fail over field if for some reason the query object
16
- doesn't have a field
17
- * spyable :: Show the 'eye' icon that displays the last ES query for this panel
18
- */
1
+ /** @scratch /panels/5
2
+ * include::panels/pie.asciidoc[]
3
+ */
4
+
5
+ /** @scratch /panels/pie/0
6
+ * == Pie
7
+ * Status: *Deprecated*
8
+ *
9
+ * The pie panel has been largely replaced by the +terms+ panel. It exists for backwards compatibility
10
+ * for now, but will be removed in a future release
11
+ *
12
+ */
19
13
  define([
20
14
  'angular',
21
15
  'app',
@@ -51,20 +45,63 @@ define([
51
45
 
52
46
  // Set and populate defaults
53
47
  var _d = {
54
- query : { field:"_type", goal: 100},
55
- queries : {
56
- mode : 'all',
57
- ids : []
58
- },
48
+ /** @scratch /panels/pie/3
49
+ * === Parameters
50
+ *
51
+ * mode:: terms or goal. Terms mode finds the top N most popular terms, Goal mode display
52
+ * progress towards a fix goal in terms of documents matched
53
+ */
54
+ mode : "terms",
55
+ /** @scratch /panels/pie/3
56
+ * size:: The max number of results to display in +terms+ mode.
57
+ */
59
58
  size : 10,
59
+ /** @scratch /panels/pie/3
60
+ * exclude:: Exclude these terms in terms mode
61
+ */
60
62
  exclude : [],
63
+ /** @scratch /panels/pie/3
64
+ * donut:: Draw a hole in the middle of the pie, creating a tasty donut.
65
+ */
61
66
  donut : false,
67
+ /** @scratch /panels/pie/3
68
+ * tilt:: Tilt the pie back into an oval shape
69
+ */
62
70
  tilt : false,
71
+ /** @scratch /panels/pie/3
72
+ * legend:: The location of the legend, above, below or none
73
+ */
63
74
  legend : "above",
75
+ /** @scratch /panels/pie/3
76
+ * labels:: Set to false to disable drawing labels inside the pie slices
77
+ */
64
78
  labels : true,
65
- mode : "terms",
66
- default_field : 'DEFAULT',
79
+ /** @scratch /panels/pie/3
80
+ * spyable:: Set to false to disable the inspect function.
81
+ */
67
82
  spyable : true,
83
+ /** @scratch /panels/pie/3
84
+ * ==== Query
85
+ *
86
+ * query object:: This confusingly named object has properties to set the terms mode field,
87
+ * and the fixed goal for the goal mode
88
+ * query.field::: the field to facet on in terms mode
89
+ * query.goal::: the fixed goal for goal mode
90
+ */
91
+ query : { field:"_type", goal: 100},
92
+ /** @scratch /panels/pie/5
93
+ * ==== Queries
94
+ *
95
+ * queries object:: This object describes the queries to use on this panel.
96
+ * queries.mode::: Of the queries available, which to use. Options: +all, pinned, unpinned, selected+
97
+ * queries.ids::: In +selected+ mode, which query ids are selected.
98
+ */
99
+ queries : {
100
+ mode : 'all',
101
+ ids : []
102
+ },
103
+ default_field : '_type',
104
+
68
105
  };
69
106
  _.defaults($scope.panel,_d);
70
107
 
@@ -1,32 +1,15 @@
1
- /*
2
-
3
- ## Histogram
4
-
5
- ### Parameters
6
- * auto_int :: Auto calculate data point interval?
7
- * resolution :: If auto_int is enables, shoot for this many data points, rounding to
8
- sane intervals
9
- * interval :: Datapoint interval in elasticsearch date math format (eg 1d, 1w, 1y, 5y)
10
- * fill :: Only applies to line charts. Level of area shading from 0-10
11
- * linewidth :: Only applies to line charts. How thick the line should be in pixels
12
- While the editor only exposes 0-10, this can be any numeric value.
13
- Set to 0 and you'll get something like a scatter plot
14
- * timezone :: This isn't totally functional yet. Currently only supports browser and utc.
15
- browser will adjust the x-axis labels to match the timezone of the user's
16
- browser
17
- * spyable :: Dislay the 'eye' icon that show the last elasticsearch query
18
- * zoomlinks :: Show the zoom links?
19
- * bars :: Show bars in the chart
20
- * stack :: Stack multiple queries. This generally a crappy way to represent things.
21
- You probably should just use a line chart without stacking
22
- * points :: Should circles at the data points on the chart
23
- * lines :: Line chart? Sweet.
24
- * legend :: Show the legend?
25
- * x-axis :: Show x-axis labels and grid lines
26
- * y-axis :: Show y-axis labels and grid lines
27
- * interactive :: Allow drag to select time range
28
-
29
- */
1
+ /** @scratch /panels/5
2
+ * include::panels/sparklines.asciidoc[]
3
+ */
4
+
5
+ /** @scratch /panels/sparklines/0
6
+ * == Sparklines
7
+ * Status: *Experimental*
8
+ *
9
+ * The sparklines panel shows tiny time charts. The purpose of these is not to give an exact value,
10
+ * but rather to show the shape of the time series in a compact manner
11
+ *
12
+ */
30
13
  define([
31
14
  'angular',
32
15
  'app',
@@ -70,15 +53,39 @@ function (angular, app, $, _, kbn, moment, timeSeries) {
70
53
 
71
54
  // Set and populate defaults
72
55
  var _d = {
56
+ /** @scratch /panels/sparklines/3
57
+ * === Parameters
58
+ * mode:: Value to use for the y-axis. For all modes other than count, +value_field+ must be
59
+ * defined. Possible values: count, mean, max, min, total.
60
+ */
73
61
  mode : 'count',
62
+ /** @scratch /panels/sparklines/3
63
+ * time_field:: x-axis field. This must be defined as a date type in Elasticsearch.
64
+ */
74
65
  time_field : '@timestamp',
75
- queries : {
76
- mode : 'all',
77
- ids : []
78
- },
66
+ /** @scratch /panels/sparklines/3
67
+ * value_field:: y-axis field if +mode+ is set to mean, max, min or total. Must be numeric.
68
+ */
79
69
  value_field : null,
70
+ /** @scratch /panels/sparklines/3
71
+ * interval:: Sparkline intervals are computed automatically as long as there is a time filter
72
+ * present. In the absence of a time filter, use this interval.
73
+ */
80
74
  interval : '5m',
81
- spyable : true
75
+ /** @scratch /panels/sparklines/3
76
+ * spyable:: Show inspect icon
77
+ */
78
+ spyable : true,
79
+ /** @scratch /panels/sparklines/5
80
+ * ==== Queries
81
+ * queries object:: This object describes the queries to use on this panel.
82
+ * queries.mode::: Of the queries available, which to use. Options: +all, pinned, unpinned, selected+
83
+ * queries.ids::: In +selected+ mode, which query ids are selected.
84
+ */
85
+ queries : {
86
+ mode : 'all',
87
+ ids : []
88
+ },
82
89
  };
83
90
 
84
91
  _.defaults($scope.panel,_d);
@@ -332,7 +339,7 @@ function (angular, app, $, _, kbn, moment, timeSeries) {
332
339
  max: _.isUndefined(scope.series.range.to) ? null : scope.series.range.to.getTime()
333
340
  },
334
341
  grid: {
335
- hoverable: true,
342
+ hoverable: false,
336
343
  show: false
337
344
  }
338
345
  };
@@ -42,7 +42,7 @@
42
42
  <select class="input-small" ng-model="panel.style['font-size']" ng-options="f for f in ['7pt','8pt','9pt','10pt','12pt','14pt','16pt','18pt','20pt','24pt','28pt','32pt','36pt','42pt','48pt','52pt','60pt','72pt']"></select></span>
43
43
  </div>
44
44
  <div class="span2">
45
- <h6>Trim Factor <tip>Trim fields to this long divided by # of rows</tip></h6>
46
- <input type="number" class="input-small" ng-model="panel.trimFactor">
45
+ <h6>Trim Factor <tip>Trim fields to this long divided by # of rows. Requires data refresh.</tip></h6>
46
+ <input type="number" class="input-small" ng-model="panel.trimFactor" ng-change="set_refresh(true)">
47
47
  </div>
48
48
  </div>
@@ -8,24 +8,29 @@
8
8
  </style>
9
9
 
10
10
  <div class="row-fluid">
11
- <div ng-class="{'span3':panel.field_list}" ng-show="panel.field_list">
11
+ <div bindonce ng-class="{'span3':panel.field_list}" ng-if="panel.field_list">
12
12
  <div class="sidebar-nav">
13
13
  <strong>Fields <i class=" icon-chevron-sign-left pointer " ng-click="panel.field_list = !panel.field_list" bs-tooltip="'Hide field list'" ng-show="panel.field_list"></i></strong><p>
14
14
  <div class="small">
15
- <span class="link" ng-click="panel.all_fields = true;" ng-class="{strong:panel.all_fields}">All</span> /
16
- <span class="link" ng-click="panel.all_fields = false;" ng-class="{strong:!panel.all_fields}">Current</span>
15
+ <span class="link" ng-click="panel.all_fields = true;" ng-class="{strong:panel.all_fields}">
16
+ All ({{fields.list.length}})</span><br>
17
+ <span class="link" ng-click="panel.all_fields = false;" ng-class="{strong:!panel.all_fields}">
18
+ Current ({{current_fields.length || 0}})</span>
19
+
17
20
  </div>
18
21
  <div><input type="text" class="input-medium" placeholder="Type to filter..." ng-model="fieldFilter"></div>
19
22
 
20
-
21
- <ul class="unstyled" style="{{panel.overflow}}:{{panel.height || row.height}};overflow-y:auto;overflow-x:hidden;">
22
- <li ng-style="panel.style" ng-repeat="field in fields.list|filter:fieldFilter|orderBy:identity" ng-show="panel.all_fields">
23
- <i class="pointer" ng-class="{'icon-check': _.contains(panel.fields,field),'icon-check-empty': !_.contains(panel.fields,field)}" ng-click="toggle_field(field)"></i>
24
- <a class="pointer" data-unique="1" bs-popover="'app/panels/table/micropanel.html'" data-placement="rightTop" ng-click="toggle_micropanel(field,true)" ng-class="{label: _.contains(panel.fields,field)}">{{field}}</a>
23
+ <ul class="unstyled" style="{{panel.overflow}}:{{panel.height || row.height}};overflow-y:auto;overflow-x:hidden;" ng-if="panel.all_fields">
24
+ <li ng-style="panel.style" ng-repeat="field in fields.list|filter:fieldFilter|orderBy:identity">
25
+ <i class="pointer" ng-class="{'icon-check': columns[field],'icon-check-empty': _.isUndefined(columns[field])}" ng-click="toggle_field(field)"></i>
26
+ <a class="pointer" data-unique="1" bs-popover="'app/panels/table/micropanel.html'" data-placement="rightTop" ng-click="toggle_micropanel(field,true)" ng-class="{label: columns[field]}" bo-text="field"></a>
25
27
  </li>
26
- <li ng-style="panel.style" ng-repeat="field in current_fields|filter:fieldFilter|orderBy:identity" ng-hide="panel.all_fields">
27
- <i class="pointer" ng-class="{'icon-check': _.contains(panel.fields,field),'icon-check-empty': !_.contains(panel.fields,field)}" ng-click="toggle_field(field)"></i>
28
- <a class="pointer" data-unique="1" bs-popover="'app/panels/table/micropanel.html'" data-placement="rightTop" ng-click="toggle_micropanel(field,true)" ng-class="{label: _.contains(panel.fields,field)}">{{field}}</a>
28
+ </ul>
29
+
30
+ <ul class="unstyled" style="{{panel.overflow}}:{{panel.height || row.height}};overflow-y:auto;overflow-x:hidden;" ng-if="!panel.all_fields">
31
+ <li ng-style="panel.style" ng-repeat="field in current_fields|filter:fieldFilter|orderBy:identity">
32
+ <i class="pointer" ng-class="{'icon-check': columns[field],'icon-check-empty': _.isUndefined(columns[field])}" ng-click="toggle_field(field)"></i>
33
+ <a class="pointer" data-unique="1" bs-popover="'app/panels/table/micropanel.html'" data-placement="rightTop" ng-click="toggle_micropanel(field,true)" ng-class="{label: columns[field]}" bo-text="field"></a>
29
34
  </li>
30
35
  </ul>
31
36
 
@@ -61,12 +66,12 @@
61
66
  </th>
62
67
 
63
68
  </thead>
64
- <tbody ng-repeat="event in data| slice:panel.offset:panel.offset+panel.size" ng-class-odd="'odd'">
69
+ <tbody bindonce ng-repeat="event in data| slice:panel.offset:panel.offset+panel.size" ng-class-odd="'odd'">
65
70
  <tr ng-click="toggle_details(event)" class="pointer">
66
- <td ng-show="panel.fields.length<1">{{event._source|stringify|tableTruncate:panel.trimFactor:1}}</td>
67
- <td ng-show="panel.fields.length>0" ng-repeat="field in panel.fields" ng-bind-html-unsafe="(event.kibana.highlight[field]||event.kibana._source[field]) |tableHighlight | tableTruncate:panel.trimFactor:panel.fields.length"></td>
71
+ <td ng-if="panel.fields.length<1" bo-text="event._source|stringify|tableTruncate:panel.trimFactor:1"></td>
72
+ <td ng-show="panel.fields.length>0" ng-repeat="field in panel.fields" bo-html="(event.kibana.highlight[field]||event.kibana._source[field]) |tableHighlight | tableTruncate:panel.trimFactor:panel.fields.length"></td>
68
73
  </tr>
69
- <tr ng-show="event.kibana.details">
74
+ <tr ng-if="event.kibana.details">
70
75
  <td colspan={{panel.fields.length}} ng-switch="event.kibana.view">
71
76
  <span>
72
77
  View:
@@ -82,18 +87,18 @@
82
87
  <th>Value</th>
83
88
  </thead>
84
89
  <tr ng-repeat="(key,value) in event.kibana._source track by $index" ng-class-odd="'odd'">
85
- <td>{{key}}</td>
90
+ <td bo-text="key"></td>
86
91
  <td style="white-space:nowrap">
87
92
  <i class='icon-search pointer' ng-click="build_search(key,value)" bs-tooltip="'Add filter to match this value'"></i>
88
93
  <i class='icon-ban-circle pointer' ng-click="build_search(key,value,true)" bs-tooltip="'Add filter to NOT match this value'"></i>
89
94
  <i class="pointer icon-th" ng-click="toggle_field(key)" bs-tooltip="'Toggle table column'"></i>
90
95
  </td>
91
96
  <!-- At some point we need to create a more efficient way of applying the filter pipeline -->
92
- <td style="white-space:pre-wrap" ng-bind-html-unsafe="value|noXml|urlLink|stringify"></td>
97
+ <td style="white-space:pre-wrap" bo-html="value|noXml|urlLink|stringify"></td>
93
98
  </tr>
94
99
  </table>
95
- <pre style="white-space:pre-wrap" ng-bind-html="without_kibana(event)|tableJson:2" ng-switch-when="json"></pre>
96
- <pre ng-bind-html="without_kibana(event)|tableJson:1" ng-switch-when="raw"></pre>
100
+ <pre style="white-space:pre-wrap" bo-html="without_kibana(event)|tableJson:2" ng-switch-when="json"></pre>
101
+ <pre bo-html="without_kibana(event)|tableJson:1" ng-switch-when="raw"></pre>
97
102
  </td>
98
103
  </tr>
99
104
  </tbody>