module.html 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <div ng-controller='table' ng-init='init()'>
  2. <style>
  3. .table-doc-table {
  4. margin-left: 0px !important;
  5. overflow-y: auto;
  6. overflow-x: scroll;
  7. }
  8. </style>
  9. <div class="row-fluid">
  10. <div ng-class="{'span3':panel.field_list}" ng-show="panel.field_list">
  11. <div class="sidebar-nav">
  12. <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>
  13. <div class="small">
  14. <span class="link" ng-click="panel.all_fields = true;" ng-class="{strong:panel.all_fields}">All</span> /
  15. <span class="link" ng-click="panel.all_fields = false;" ng-class="{strong:!panel.all_fields}">Current</span>
  16. </div>
  17. <div><input type="text" class="input-medium" placeholder="Type to filter..." ng-model="fieldFilter"></div>
  18. <ul class="unstyled" style="{{panel.overflow}}:{{panel.height || row.height}};overflow-y:auto;overflow-x:hidden;">
  19. <li ng-style="panel.style" ng-repeat="field in fields.list|filter:fieldFilter" ng-show="panel.all_fields">
  20. <i class="pointer" ng-class="{'icon-check': _.contains(panel.fields,field),'icon-check-empty': !_.contains(panel.fields,field)}" ng-click="toggle_field(field)"></i>
  21. <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>
  22. </li>
  23. <li ng-style="panel.style" ng-repeat="field in current_fields|filter:fieldFilter" ng-hide="panel.all_fields">
  24. <i class="pointer" ng-class="{'icon-check': _.contains(panel.fields,field),'icon-check-empty': !_.contains(panel.fields,field)}" ng-click="toggle_field(field)"></i>
  25. <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>
  26. </li>
  27. </ul>
  28. </div>
  29. </div>
  30. <div style="{{panel.overflow}}:{{panel.height || row.height}};" ng-class="{'span9':panel.field_list,'span12':!panel.field_list}" class="table-doc-table">
  31. <i class="pull-left icon-chevron-sign-right pointer" ng-click="panel.field_list = !panel.field_list" bs-tooltip="'Show field list'" ng-show="!panel.field_list"></i>
  32. <div class="row-fluid" ng-show="panel.paging">
  33. <div class="span1 offset1" style="text-align:right">
  34. <i ng-click="panel.offset = 0" ng-show="panel.offset > 0" class='icon-circle-arrow-left pointer'></i>
  35. <i ng-click="panel.offset = (panel.offset - panel.size)" ng-show="panel.offset > 0" class='icon-arrow-left pointer'></i>
  36. </div>
  37. <div class="span8" style="text-align:center">
  38. <strong>{{panel.offset}}</strong> to <strong>{{panel.offset + data.slice(panel.offset,panel.offset+panel.size).length}}</strong>
  39. <small> of {{data.length}} available for paging</small>
  40. </div>
  41. <div class="span1" style="text-align:left">
  42. <i ng-click="panel.offset = (panel.offset + panel.size)" ng-show="data.length > panel.offset+panel.size" class='icon-arrow-right pointer'></i>
  43. </div>
  44. </div>
  45. <table class="table-hover table table-condensed" ng-style="panel.style">
  46. <thead ng-show="panel.header">
  47. <th ng-show="panel.fields.length<1">_source (select columns from the list to the left)</th>
  48. <th style="white-space:nowrap" ng-repeat="field in panel.fields">
  49. <i ng-show="!$first" class="pointer link icon-caret-left" ng-click="_.move(panel.fields,$index,$index-1)"></i>
  50. <span class="pointer" ng-click="set_sort(field)" ng-show='panel.sortable'>
  51. {{field}}
  52. <i ng-show='field == panel.sort[0]' class="pointer link" ng-class="{'icon-chevron-up': panel.sort[1] == 'asc','icon-chevron-down': panel.sort[1] == 'desc'}"></i>
  53. </span>
  54. <span ng-show='!panel.sortable'>{{field}}</span>
  55. <i ng-show="!$last" class="pointer link icon-caret-right" ng-click="_.move(panel.fields,$index,$index+1)"></i>
  56. </th>
  57. </thead>
  58. <tbody ng-repeat="event in data| slice:panel.offset:panel.offset+panel.size" ng-class-odd="'odd'">
  59. <tr ng-click="toggle_details(event)" class="pointer">
  60. <td ng-show="panel.fields.length<1">{{event._source|stringify|tableTruncate:panel.trimFactor:1}}</td>
  61. <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>
  62. </tr>
  63. <tr ng-show="event.kibana.details">
  64. <td colspan={{panel.fields.length}} ng-switch="event.kibana.view">
  65. <span>
  66. View:
  67. <a class="link" ng-class="{'strong':event.kibana.view == 'table'}" ng-click="event.kibana.view = 'table'">Table</a> /
  68. <a class="link" ng-class="{'strong':event.kibana.view == 'json'}" ng-click="event.kibana.view = 'json'">JSON</a> /
  69. <a class="link" ng-class="{'strong':event.kibana.view == 'raw'}" ng-click="event.kibana.view = 'raw'">Raw</a>
  70. <i class="link pull-right icon-chevron-up" ng-click="toggle_details(event)"></i>
  71. </span>
  72. <table class='table table-bordered table-condensed' ng-switch-when="table">
  73. <thead>
  74. <th>Field</th>
  75. <th>Action</th>
  76. <th>Value</th>
  77. </thead>
  78. <tr ng-repeat="(key,value) in event.kibana._source track by $index" ng-class-odd="'odd'">
  79. <td>{{key}}</td>
  80. <td style="white-space:nowrap">
  81. <i class='icon-search pointer' ng-click="build_search(key,value)" bs-tooltip="'Add filter to match this value'"></i>
  82. <i class='icon-ban-circle pointer' ng-click="build_search(key,value,true)" bs-tooltip="'Add filter to NOT match this value'"></i>
  83. <i class="pointer icon-th" ng-click="toggle_field(key)" bs-tooltip="'Toggle table column'"></i>
  84. </td>
  85. <!-- At some point we need to create a more efficient way of applying the filter pipeline -->
  86. <td style="white-space:pre-wrap" ng-bind-html-unsafe="value|noXml|urlLink|stringify"></td>
  87. </tr>
  88. </table>
  89. <pre style="white-space:pre-wrap" ng-bind-html="without_kibana(event)|tableJson:2" ng-switch-when="json"></pre>
  90. <pre ng-bind-html="without_kibana(event)|tableJson:1" ng-switch-when="raw"></pre>
  91. </td>
  92. </tr>
  93. </tbody>
  94. </table>
  95. <div class="row-fluid" ng-show="panel.paging">
  96. <div class="span1 offset3" style="text-align:right">
  97. <i ng-click="panel.offset = 0" ng-show="panel.offset > 0" class='icon-circle-arrow-left pointer'></i>
  98. <i ng-click="panel.offset = (panel.offset - panel.size)" ng-show="panel.offset > 0" class='icon-arrow-left pointer'></i>
  99. </div>
  100. <div class="span4" style="text-align:center">
  101. <strong>{{panel.offset}}</strong> to <strong>{{panel.offset + data.slice(panel.offset,panel.offset+panel.size).length}}</strong>
  102. <small> of {{data.length}} available for paging</small>
  103. </div>
  104. <div class="span1" style="text-align:left">
  105. <i ng-click="panel.offset = (panel.offset + panel.size)" ng-show="data.length > panel.offset+panel.size" class='icon-arrow-right pointer'></i>
  106. </div>
  107. </div>
  108. </div>
  109. </div>
  110. </div>