kibana-sinatra 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/kibana-sinatra.gemspec +1 -0
  4. data/lib/kibana/assets/app/app.js +8 -3
  5. data/lib/kibana/assets/app/components/kbn.js +45 -10
  6. data/lib/kibana/assets/app/components/{underscore.extended.js → lodash.extended.js} +2 -4
  7. data/lib/kibana/assets/app/components/require.config.js +5 -6
  8. data/lib/kibana/assets/app/components/settings.js +1 -1
  9. data/lib/kibana/assets/app/controllers/dash.js +10 -5
  10. data/lib/kibana/assets/app/controllers/dashLoader.js +1 -1
  11. data/lib/kibana/assets/app/controllers/pulldown.js +1 -1
  12. data/lib/kibana/assets/app/controllers/row.js +1 -1
  13. data/lib/kibana/assets/app/dashboards/default.json +1 -1
  14. data/lib/kibana/assets/app/dashboards/logstash.js +4 -4
  15. data/lib/kibana/assets/app/dashboards/logstash.json +1 -1
  16. data/lib/kibana/assets/app/directives/addPanel.js +1 -1
  17. data/lib/kibana/assets/app/directives/arrayJoin.js +1 -1
  18. data/lib/kibana/assets/app/directives/configModal.js +23 -5
  19. data/lib/kibana/assets/app/directives/kibanaPanel.js +70 -50
  20. data/lib/kibana/assets/app/directives/kibanaSimplePanel.js +1 -1
  21. data/lib/kibana/assets/app/factories/store.js +59 -0
  22. data/lib/kibana/assets/app/filters/all.js +6 -13
  23. data/lib/kibana/assets/app/panels/bettermap/module.html +5 -0
  24. data/lib/kibana/assets/app/panels/bettermap/module.js +1 -1
  25. data/lib/kibana/assets/app/panels/column/editor.html +1 -1
  26. data/lib/kibana/assets/app/panels/column/module.js +7 -6
  27. data/lib/kibana/assets/app/panels/dashcontrol/module.js +1 -1
  28. data/lib/kibana/assets/app/panels/derivequeries/module.js +1 -1
  29. data/lib/kibana/assets/app/panels/fields/module.js +1 -1
  30. data/lib/kibana/assets/app/panels/filtering/module.html +10 -17
  31. data/lib/kibana/assets/app/panels/filtering/module.js +19 -1
  32. data/lib/kibana/assets/app/panels/histogram/module.html +4 -4
  33. data/lib/kibana/assets/app/panels/histogram/module.js +62 -12
  34. data/lib/kibana/assets/app/panels/histogram/timeSeries.js +6 -3
  35. data/lib/kibana/assets/app/panels/hits/module.js +1 -1
  36. data/lib/kibana/assets/app/panels/map/module.js +1 -1
  37. data/lib/kibana/assets/app/panels/pie/editor.html +1 -1
  38. data/lib/kibana/assets/app/panels/pie/module.js +1 -1
  39. data/lib/kibana/assets/app/panels/query/meta.html +1 -1
  40. data/lib/kibana/assets/app/panels/query/module.html +1 -1
  41. data/lib/kibana/assets/app/panels/query/module.js +2 -7
  42. data/lib/kibana/assets/app/panels/query/query.css +9 -7
  43. data/lib/kibana/assets/app/panels/sparklines/module.js +2 -2
  44. data/lib/kibana/assets/app/panels/sparklines/timeSeries.js +3 -3
  45. data/lib/kibana/assets/app/panels/stats/editor.html +36 -0
  46. data/lib/kibana/assets/app/panels/stats/module.html +15 -0
  47. data/lib/kibana/assets/app/panels/stats/module.js +199 -0
  48. data/lib/kibana/assets/app/panels/table/editor.html +23 -27
  49. data/lib/kibana/assets/app/panels/table/micropanel.html +3 -1
  50. data/lib/kibana/assets/app/panels/table/module.js +7 -1
  51. data/lib/kibana/assets/app/panels/terms/editor.html +16 -3
  52. data/lib/kibana/assets/app/panels/terms/module.html +14 -5
  53. data/lib/kibana/assets/app/panels/terms/module.js +66 -18
  54. data/lib/kibana/assets/app/panels/text/module.js +1 -1
  55. data/lib/kibana/assets/app/panels/timepicker/editor.html +14 -12
  56. data/lib/kibana/assets/app/panels/timepicker/module.html +3 -8
  57. data/lib/kibana/assets/app/panels/timepicker/module.js +1 -1
  58. data/lib/kibana/assets/app/panels/trends/module.js +1 -1
  59. data/lib/kibana/assets/app/partials/dashLoader.html +10 -10
  60. data/lib/kibana/assets/app/partials/dashboard.html +35 -44
  61. data/lib/kibana/assets/app/partials/dasheditor.html +7 -5
  62. data/lib/kibana/assets/app/partials/paneleditor.html +2 -1
  63. data/lib/kibana/assets/app/partials/panelgeneral.html +1 -1
  64. data/lib/kibana/assets/app/partials/roweditor.html +11 -9
  65. data/lib/kibana/assets/app/services/alertSrv.js +1 -1
  66. data/lib/kibana/assets/app/services/dashboard.js +27 -14
  67. data/lib/kibana/assets/app/services/esVersion.js +70 -31
  68. data/lib/kibana/assets/app/services/fields.js +14 -37
  69. data/lib/kibana/assets/app/services/filterSrv.js +7 -11
  70. data/lib/kibana/assets/app/services/kbnIndex.js +24 -15
  71. data/lib/kibana/assets/app/services/panelMove.js +1 -1
  72. data/lib/kibana/assets/app/services/querySrv.js +20 -6
  73. data/lib/kibana/assets/app/services/timer.js +1 -1
  74. data/lib/kibana/assets/css/bootstrap.dark.min.css +1 -1
  75. data/lib/kibana/assets/css/bootstrap.light.min.css +1 -1
  76. data/lib/kibana/assets/img/cubes.png +0 -0
  77. data/lib/kibana/assets/img/light.png +0 -0
  78. data/lib/kibana/assets/index.html +3 -2
  79. data/lib/kibana/assets/vendor/LICENSE.json +90 -0
  80. data/lib/kibana/assets/vendor/angular/angular-cookies.js +185 -0
  81. data/lib/kibana/assets/vendor/angular/angular-dragdrop.js +33 -4
  82. data/lib/kibana/assets/vendor/blob.js +178 -0
  83. data/lib/kibana/assets/vendor/bootstrap/bootstrap.js +6 -1
  84. data/lib/kibana/assets/vendor/bootstrap/less/bak/bootswatch.dark.less +555 -0
  85. data/lib/kibana/assets/vendor/bootstrap/less/bak/variables.dark.less +304 -0
  86. data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.dark.less +349 -327
  87. data/lib/kibana/assets/vendor/bootstrap/less/bootswatch.light.less +590 -7
  88. data/lib/kibana/assets/vendor/bootstrap/less/modals.less +1 -1
  89. data/lib/kibana/assets/vendor/bootstrap/less/overrides.less +191 -75
  90. data/lib/kibana/assets/vendor/bootstrap/less/variables.dark.less +96 -97
  91. data/lib/kibana/assets/vendor/bootstrap/less/variables.light.less +84 -81
  92. data/lib/kibana/assets/vendor/jquery/jquery.flot.events.js +39 -51
  93. data/lib/kibana/assets/vendor/lodash.js +6785 -0
  94. data/lib/kibana/assets/vendor/numeral.js +565 -0
  95. data/lib/kibana/sinatra/version.rb +1 -1
  96. data/lib/kibana/views/config.erb +1 -0
  97. data/test/sinatra_test.rb +2 -2
  98. metadata +30 -4
  99. data/lib/kibana/assets/vendor/underscore.js +0 -1246
@@ -1,8 +1,8 @@
1
1
  define([
2
- 'underscore',
3
- './interval'
2
+ './interval',
3
+ 'lodash'
4
4
  ],
5
- function (_, Interval) {
5
+ function (Interval, _) {
6
6
  'use strict';
7
7
 
8
8
  var ts = {};
@@ -46,6 +46,8 @@ function (_, Interval) {
46
46
 
47
47
  // will keep all values here, keyed by their time
48
48
  this._data = {};
49
+ // For each bucket in _data, store a corresponding counter of how many times it was written to.
50
+ this._counters = {};
49
51
  this.start_time = opts.start_date && getDatesTime(opts.start_date);
50
52
  this.end_time = opts.end_date && getDatesTime(opts.end_date);
51
53
  this.opts = opts;
@@ -57,6 +59,7 @@ function (_, Interval) {
57
59
  * @param {any} value The value at this time
58
60
  */
59
61
  ts.ZeroFilled.prototype.addValue = function (time, value) {
62
+ this._counters[time] = (this._counters[time] || 0) + 1;
60
63
  if (time instanceof Date) {
61
64
  time = getDatesTime(time);
62
65
  } else {
@@ -13,7 +13,7 @@
13
13
  define([
14
14
  'angular',
15
15
  'app',
16
- 'underscore',
16
+ 'lodash',
17
17
  'jquery',
18
18
  'kbn',
19
19
 
@@ -13,7 +13,7 @@
13
13
  define([
14
14
  'angular',
15
15
  'app',
16
- 'underscore',
16
+ 'lodash',
17
17
  'jquery',
18
18
  'config',
19
19
  './lib/jquery.jvectormap.min'
@@ -19,7 +19,7 @@
19
19
  <input class="input-mini" type="number" ng-model="panel.size" ng-change="set_refresh(true)">
20
20
  </div>
21
21
  <div class="editor-option">
22
- <label class="small">Exclude Terms(s) (comma seperated)</label>
22
+ <label class="small">Exclude Terms(s) (comma separated)</label>
23
23
  <input array-join type="text" ng-model='panel.exclude'></input>
24
24
  </div>
25
25
  </div>
@@ -13,7 +13,7 @@
13
13
  define([
14
14
  'angular',
15
15
  'app',
16
- 'underscore',
16
+ 'lodash',
17
17
  'jquery',
18
18
  'kbn',
19
19
  'config'
@@ -8,7 +8,7 @@
8
8
 
9
9
  <fieldset>
10
10
  <select class="input-small" ng-model="querySrv.list[id].type" ng-change="typeChange(querySrv.list[id])">
11
- <option ng-repeat="type in queryTypes|esVersion:'require'">{{type.name}}</option>
11
+ <option ng-repeat="type in queryTypes">{{type}}</option>
12
12
  </select> &nbsp<a href="" class="small" ng-click="queryHelp(querySrv.list[id].type)"> About the {{querySrv.list[id].type}} query</a>
13
13
 
14
14
  <hr class="small">
@@ -16,7 +16,7 @@
16
16
  </form>
17
17
  </div>
18
18
  <div style="display:inline-block" ng-repeat="id in querySrv.ids|pinnedQuery:true">
19
- <span class="pointer" ng-show="$first" ng-click="panel.pinned = !panel.pinned"><span class="pins">Pinned</span> <i ng-class="{'icon-caret-right':panel.pinned,'icon-caret-left':!panel.pinned}"></i></span>
19
+ <span class="pointer badge pins" ng-show="$first" ng-click="panel.pinned = !panel.pinned">Pinned <i ng-class="{'icon-caret-right':panel.pinned,'icon-caret-left':!panel.pinned}"></i></span>
20
20
  <span ng-show="panel.pinned" class="badge pinned">
21
21
  <i class="icon-circle pointer" ng-show="querySrv.list[id].enable" ng-style="{color: querySrv.list[id].color}" data-unique="1" bs-popover="'app/panels/query/meta.html'" data-placement="bottomLeft"></i>
22
22
  <i class="pointer icon-circle-blank" bs-tooltip="'Activate query'" ng-click="querySrv.list[id].enable=true;dashboard.refresh();" ng-hide="querySrv.list[id].enable" ng-style="{color: querySrv.list[id].color}"></i>
@@ -10,7 +10,7 @@
10
10
  define([
11
11
  'angular',
12
12
  'app',
13
- 'underscore',
13
+ 'lodash',
14
14
 
15
15
  'css!./query.css'
16
16
  ], function (angular, app, _) {
@@ -38,12 +38,7 @@ define([
38
38
  $scope.querySrv = querySrv;
39
39
 
40
40
  // A list of query types for the query config popover
41
- $scope.queryTypes = _.map(querySrv.queryTypes, function(v,k) {
42
- return {
43
- name:k,
44
- require:v.require
45
- };
46
- });
41
+ $scope.queryTypes = querySrv.types;
47
42
 
48
43
  var queryHelpModal = $modal({
49
44
  template: './app/panels/query/helpModal.html',
@@ -7,16 +7,21 @@
7
7
  }
8
8
  .begin-query {
9
9
  position:absolute;
10
- left:13px;
10
+ left:10px;
11
11
  top:5px;
12
12
  }
13
13
  .end-query {
14
14
  position:absolute;
15
- right:15px;
15
+ right:10px;
16
16
  top:5px;
17
17
  }
18
+
19
+ .end-query i, .begin-query i {
20
+ margin: 0px;
21
+ }
22
+
18
23
  .panel-query {
19
- padding-left: 35px !important;
24
+ padding-left: 25px !important;
20
25
  height: 31px !important;
21
26
  -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
22
27
  -moz-box-sizing: border-box; /* Firefox, other Gecko */
@@ -28,7 +33,7 @@
28
33
  }
29
34
 
30
35
  .form-search:hover .has-remove {
31
- padding-left: 50px !important;
36
+ padding-left: 40px !important;
32
37
  }
33
38
  .remove-query {
34
39
  opacity: 0;
@@ -39,9 +44,6 @@
39
44
  .form-search:hover .remove-query {
40
45
  opacity: 1;
41
46
  }
42
- .query-panel .pins {
43
- text-decoration: underline;
44
- }
45
47
  .query-panel .pinned {
46
48
  margin-right: 5px;
47
49
  }
@@ -14,7 +14,7 @@ define([
14
14
  'angular',
15
15
  'app',
16
16
  'jquery',
17
- 'underscore',
17
+ 'lodash',
18
18
  'kbn',
19
19
  'moment',
20
20
  './timeSeries',
@@ -46,7 +46,7 @@ function (angular, app, $, _, kbn, moment, timeSeries) {
46
46
  }
47
47
  ],
48
48
  status : "Experimental",
49
- description : "Sparklines are tiny, simple, time series charts, shown seperately. Because "+
49
+ description : "Sparklines are tiny, simple, time series charts, shown separately. Because "+
50
50
  "sparklines are unclutted by grids, axis markers and colors, they are perfect for spotting"+
51
51
  " change in a series"
52
52
  };
@@ -1,8 +1,8 @@
1
1
  define([
2
- 'underscore',
3
- './interval'
2
+ './interval',
3
+ 'lodash'
4
4
  ],
5
- function (_, Interval) {
5
+ function (Interval, _) {
6
6
  'use strict';
7
7
 
8
8
  var ts = {};
@@ -0,0 +1,36 @@
1
+ <div class="row-fluid">
2
+ <h5>Details</h5>
3
+ <div class="editor-option">
4
+ <label class="small">Function</label>
5
+ <select ng-change="set_refresh(true)" class="input-small" ng-model="panel.mode" ng-options="f for f in ['count','min','mean','max','total']"></select>
6
+ </div>
7
+ <div class="editor-option">
8
+ <label class="small">Field <tip>This field must contain a numeric value</tip></label>
9
+ <input ng-change="set_refresh(true)" placeholder="Start typing" bs-typeahead="fields.list" type="text" class="input-large" ng-model="panel.field">
10
+ </div>
11
+ <div class="editor-option">
12
+ <label class="small">Unit</label>
13
+ <input type="text" class="input-large" ng-model="panel.unit">
14
+ </div>
15
+ <h5>Formating</h5>
16
+ <div class="editor-option">
17
+ <label class="small">Format</label>
18
+ <select ng-change="set_refresh(true)" class="input-small" ng-model="panel.format" ng-options="f for f in ['number','float','money','bytes']"></select>
19
+ </div>
20
+ <div class="editor-option">
21
+ <label class="small">Font Size</label>
22
+ <select class="input-mini" 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>
23
+ </div>
24
+ <div class="editor-option">
25
+ <label class="small">Display Breakdowns</label>
26
+ <select class="input-mini" ng-model="panel.display_breakdown" ng-options="f for f in ['yes', 'no']"></select></span>
27
+ </div>
28
+ <div class="editor-option">
29
+ <label class="small">Label column name</label>
30
+ <input type="text" class="input-large" ng-model="panel.label_name">
31
+ </div>
32
+ <div class="editor-option">
33
+ <label class="small">Value column name</label>
34
+ <input type="text" class="input-large" ng-model="panel.value_name">
35
+ </div>
36
+ </div>
@@ -0,0 +1,15 @@
1
+ <div ng-controller="stats" ng-init="init()">
2
+ <h1 ng-style="panel.style" style="text-align: center; line-height: .6em">{{data.value|formatstats:panel.format}} <small style="font-size: .5em; line-height: 0;">{{panel.unit}}</small></h1>
3
+ <table ng-show="panel.display_breakdown == 'yes'" cellspacing="0" class="table-hover table table-condensed" style="margin-top: 38px;">
4
+ <tbody>
5
+ <tr>
6
+ <th><a href="" ng-click="set_sort('label')" ng-class="{'icon-chevron-down': panel.sort_field == 'label' && panel.sort_reverse == true, 'icon-chevron-up': panel.sort_field == 'label' && panel.sort_reverse == false}"> {{panel.label_name}} </a></th>
7
+ <th style="text-align: right;"><a href="" ng-click="set_sort('value')" ng-class="{'icon-chevron-down': panel.sort_field == 'value' && panel.sort_reverse == true, 'icon-chevron-up': panel.sort_field == 'value' && panel.sort_reverse == false}"> {{panel.value_name}} </a></th>
8
+ </tr>
9
+ <tr ng-repeat="item in data.rows | orderBy:panel.sort_field:panel.sort_reverse">
10
+ <td><i class="icon-circle" ng-style="{color:item.color}"></i> {{item.label}}</td>
11
+ <td style="text-align: right;">{{item.value|formatstats:panel.format}} {{panel.unit}}</td>
12
+ </tr>
13
+ </tbody>
14
+ </table>
15
+ </div>
@@ -0,0 +1,199 @@
1
+ /*
2
+
3
+ ## Stats Module
4
+
5
+ ### Parameters
6
+ * format :: The format of the value returned. (Default: number)
7
+ * style :: The font size of the main number to be displayed.
8
+ * mode :: The aggergate value to use for display
9
+ * spyable :: Dislay the 'eye' icon that show the last elasticsearch query
10
+
11
+ */
12
+ define([
13
+ 'angular',
14
+ 'app',
15
+ 'lodash',
16
+ 'jquery',
17
+ 'kbn',
18
+ 'numeral'
19
+ ], function (
20
+ angular,
21
+ app,
22
+ _,
23
+ $,
24
+ kbn,
25
+ numeral
26
+ ) {
27
+
28
+ 'use strict';
29
+
30
+ var module = angular.module('kibana.panels.stats', []);
31
+ app.useModule(module);
32
+
33
+ module.controller('stats', function ($scope, querySrv, dashboard, filterSrv) {
34
+
35
+ $scope.panelMeta = {
36
+ modals : [
37
+ {
38
+ description: "Inspect",
39
+ icon: "icon-info-sign",
40
+ partial: "app/partials/inspector.html",
41
+ show: $scope.panel.spyable
42
+ }
43
+ ],
44
+ editorTabs : [
45
+ {title:'Queries', src:'app/partials/querySelect.html'}
46
+ ],
47
+ status: 'Beta',
48
+ description: 'A statistical panel for displaying aggregations using the Elastic Search statistical facet query.'
49
+ };
50
+
51
+
52
+ var defaults = {
53
+ queries : {
54
+ mode : 'all',
55
+ ids : []
56
+ },
57
+ style : { "font-size": '24pt'},
58
+ format: 'number',
59
+ mode: 'count',
60
+ display_breakdown: 'yes',
61
+ sort_field: '',
62
+ sort_reverse: false,
63
+ label_name: 'Query',
64
+ value_name: 'Value',
65
+ spyable : true
66
+ };
67
+
68
+ _.defaults($scope.panel, defaults);
69
+
70
+ $scope.init = function () {
71
+ $scope.ready = false;
72
+ $scope.$on('refresh', function () {
73
+ $scope.get_data();
74
+ });
75
+ $scope.get_data();
76
+ };
77
+
78
+ $scope.set_sort = function(field) {
79
+ if($scope.panel.sort_field === field && $scope.panel.sort_reverse === false) {
80
+ $scope.panel.sort_reverse = true;
81
+ } else if($scope.panel.sort_field === field && $scope.panel.sort_reverse === true) {
82
+ $scope.panel.sort_field = '';
83
+ $scope.panel.sort_reverse = false;
84
+ } else {
85
+ $scope.panel.sort_field = field;
86
+ $scope.panel.sort_reverse = false;
87
+ }
88
+ };
89
+
90
+ $scope.get_data = function () {
91
+ if(dashboard.indices.length === 0) {
92
+ return;
93
+ }
94
+
95
+ $scope.panelMeta.loading = true;
96
+
97
+ var request,
98
+ results,
99
+ boolQuery,
100
+ queries;
101
+
102
+ request = $scope.ejs.Request().indices(dashboard.indices);
103
+
104
+ $scope.panel.queries.ids = querySrv.idsByMode($scope.panel.queries);
105
+ queries = querySrv.getQueryObjs($scope.panel.queries.ids);
106
+
107
+
108
+ // This could probably be changed to a BoolFilter
109
+ boolQuery = $scope.ejs.BoolQuery();
110
+ _.each(queries,function(q) {
111
+ boolQuery = boolQuery.should(querySrv.toEjsObj(q));
112
+ });
113
+
114
+ request = request
115
+ .facet($scope.ejs.StatisticalFacet('stats')
116
+ .field($scope.panel.field)
117
+ .facetFilter($scope.ejs.QueryFilter(
118
+ $scope.ejs.FilteredQuery(
119
+ boolQuery,
120
+ filterSrv.getBoolFilter(filterSrv.ids)
121
+ )))).size(0);
122
+
123
+ _.each(queries, function (q) {
124
+ var alias = q.alias || q.query;
125
+ var query = $scope.ejs.BoolQuery();
126
+ query.should(querySrv.toEjsObj(q));
127
+ request.facet($scope.ejs.StatisticalFacet('stats_'+alias)
128
+ .field($scope.panel.field)
129
+ .facetFilter($scope.ejs.QueryFilter(
130
+ $scope.ejs.FilteredQuery(
131
+ query,
132
+ filterSrv.getBoolFilter(filterSrv.ids)
133
+ )
134
+ ))
135
+ );
136
+ });
137
+
138
+ // Populate the inspector panel
139
+ $scope.inspector = angular.toJson(JSON.parse(request.toString()),true);
140
+
141
+ results = request.doSearch();
142
+
143
+ results.then(function(results) {
144
+ $scope.panelMeta.loading = false;
145
+ var value = results.facets.stats[$scope.panel.mode];
146
+
147
+ var rows = queries.map(function (q) {
148
+ var alias = q.alias || q.query;
149
+ var obj = _.clone(q);
150
+ obj.label = alias;
151
+ obj.Label = alias.toLowerCase(); //sort field
152
+ obj.value = results.facets['stats_'+alias][$scope.panel.mode];
153
+ obj.Value = results.facets['stats_'+alias][$scope.panel.mode]; //sort field
154
+ return obj;
155
+ });
156
+
157
+ $scope.data = {
158
+ value: value,
159
+ rows: rows
160
+ };
161
+
162
+ $scope.$emit('render');
163
+ });
164
+ };
165
+
166
+ $scope.set_refresh = function (state) {
167
+ $scope.refresh = state;
168
+ };
169
+
170
+ $scope.close_edit = function() {
171
+ if($scope.refresh) {
172
+ $scope.get_data();
173
+ }
174
+ $scope.refresh = false;
175
+ $scope.$emit('render');
176
+ };
177
+
178
+ });
179
+
180
+ module.filter('formatstats', function(){
181
+ return function (value,format) {
182
+ switch (format) {
183
+ case 'money':
184
+ value = numeral(value).format('$0,0.00');
185
+ break;
186
+ case 'bytes':
187
+ value = numeral(value).format('0.00b');
188
+ break;
189
+ case 'float':
190
+ value = numeral(value).format('0.000');
191
+ break;
192
+ default:
193
+ value = numeral(value).format('0,0');
194
+ }
195
+ return value;
196
+ };
197
+ });
198
+
199
+ });
@@ -1,49 +1,45 @@
1
1
  <div class="row-fluid">
2
- <div class="section span6">
3
- <h5>Columns</h5>
4
- <form class="input-append editor-option">
5
- <input bs-typeahead="fields.list" type="text" class="input-small" ng-model='newfield'>
6
- <button class="btn" ng-click="toggle_field(newfield);newfield=''"><i class="icon-plus"></i></button>
7
- </form><br>
8
- <span style="margin-left:3px" ng-repeat="field in $parent.panel.fields" class="label">{{field}} <i class="pointer icon-remove-sign" ng-click="toggle_field(field)"></i></span>
9
- </div>
10
- <div class="section span6">
11
- <h5>Hightlighted Fields</h5>
12
- <form class="input-append editor-option">
13
- <input bs-typeahead="fields.list" type="text" class="input-small" ng-model='newhighlight' ng-change="set_refresh(true)">
14
- <button class="btn" ng-click="toggle_highlight(newhighlight);newhighlight=''"><i class="icon-plus"></i></button>
15
- </form><br>
16
- <span style="margin-left:3px" ng-repeat="field in $parent.panel.highlight" class="label">{{field}} <i class="pointer icon-remove-sign" ng-click="toggle_highlight(field);set_refresh(true)" ></i></span>
17
- </div>
18
- </div>
19
-
20
- <div class="editor-row">
21
- <div class="section">
2
+ <div class="span6 section">
22
3
  <h5>Options</h5>
23
4
  <div class="editor-option">
24
- <h6>Header</h6><input type="checkbox" ng-model="panel.header" ng-checked="panel.header">
5
+ <label class="small">Header</label><input type="checkbox" ng-model="panel.header" ng-checked="panel.header">
25
6
  </div>
26
7
  <div class="editor-option">
27
- <h6>Sorting</h6><input type="checkbox" ng-model="panel.sortable" ng-checked="panel.sortable">
8
+ <label class="small">Sorting</label><input type="checkbox" ng-model="panel.sortable" ng-checked="panel.sortable">
28
9
  </div>
29
10
  <div class="editor-option" style="white-space:nowrap" ng-show='panel.sortable'>
30
- <h6>Sort</h6>
11
+ <label class="small">Sort</label>
31
12
  <input class="input-small" bs-typeahead="fields.list" ng-model="panel.sort[0]" type="text"></input>
32
13
  <i ng-click="set_sort(panel.sort[0])" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i>
33
14
  </div>
34
- <div class="editor-option"><h6>Font Size</h6>
15
+ <div class="editor-option"><label class="small">Font Size</label>
35
16
  <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>
36
17
  </div>
37
18
  <div class="editor-option">
38
- <h6>Trim Factor <tip>Trim fields to this long divided by # of rows. Requires data refresh.</tip></h6>
19
+ <label class="small">Trim Factor <tip>Trim fields to this long divided by # of rows. Requires data refresh.</tip></label>
39
20
  <input type="number" class="input-small" ng-model="panel.trimFactor" ng-change="set_refresh(true)">
40
21
  </div>
22
+ <br>
41
23
  <div class="editor-option">
42
- <h6>Local Time <tip>Adjust time field to browser's local time</tip></h6><input type="checkbox" ng-change="set_refresh(true)" ng-model="panel.localTime" ng-checked="panel.localTime">
24
+ <label class="small">Local Time <tip>Adjust time field to browser's local time</tip></label><input type="checkbox" ng-change="set_refresh(true)" ng-model="panel.localTime" ng-checked="panel.localTime">
43
25
  </div>
44
26
  <div class="editor-option" ng-show="panel.localTime">
45
- <h6>Time Field</h6>
27
+ <label class="small">Time Field</label>
46
28
  <input type="text" class="input-small" ng-model="panel.timeField" ng-change="set_refresh(true)" bs-typeahead="fields.list">
47
29
  </div>
48
30
  </div>
31
+ <div class="section span6">
32
+ <h5>Columns</h5>
33
+ <form class="input-append editor-option">
34
+ <input bs-typeahead="fields.list" type="text" class="input-small" ng-model='newfield'>
35
+ <button class="btn" ng-click="panel.fields = _.toggleInOut(panel.fields,newfield);newfield=''"><i class="icon-plus"></i></button>
36
+ </form><br>
37
+ <span style="margin-left:3px" ng-repeat="field in panel.fields" class="label">{{field}} <i class="pointer icon-remove-sign" ng-click="panel.fields = _.toggleInOut(panel.fields,field)"></i></span>
38
+ <h5>Hightlighted Fields</h5>
39
+ <form class="input-append editor-option">
40
+ <input bs-typeahead="fields.list" type="text" class="input-small" ng-model='newhighlight' ng-change="set_refresh(true)">
41
+ <button class="btn" ng-click="panel.highlight = _.toggleInOut(panel.highlight,newhighlight);newhighlight=''"><i class="icon-plus"></i></button>
42
+ </form><br>
43
+ <span style="margin-left:3px" ng-repeat="field in panel.highlight" class="label">{{field}} <i class="pointer icon-remove-sign" ng-click="panel.highlight = _.toggleInOut(panel.highlight,field);set_refresh(true)" ></i></span>
44
+ </div>
49
45
  </div>