module.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. ///<reference path="../../headers/common.d.ts" />
  2. import angular = require('angular');
  3. import $ = require('jquery');
  4. import _ = require('lodash');
  5. import kbn = require('app/core/utils/kbn');
  6. import moment = require('moment');
  7. import {TablePanelCtrl} from './controller';
  8. import {TableRenderer} from './renderer';
  9. import {tablePanelEditor} from './editor';
  10. export function tablePanel() {
  11. 'use strict';
  12. return {
  13. restrict: 'E',
  14. templateUrl: 'app/panels/table/module.html',
  15. controller: TablePanelCtrl,
  16. link: function(scope, elem) {
  17. var data;
  18. var panel = scope.panel;
  19. var formaters = [];
  20. function getTableHeight() {
  21. var panelHeight = scope.height || scope.panel.height || scope.row.height;
  22. if (_.isString(panelHeight)) {
  23. panelHeight = parseInt(panelHeight.replace('px', ''), 10);
  24. }
  25. return (panelHeight - 40) + 'px';
  26. }
  27. function appendTableRows(tbodyElem) {
  28. var renderer = new TableRenderer(panel, data, scope.dashboard.timezone);
  29. tbodyElem.empty();
  30. tbodyElem.html(renderer.render(0));
  31. }
  32. function appendPaginationControls(footerElem) {
  33. var paginationList = $('<ul></ul>');
  34. var pageCount = data.rows.length / panel.pageSize;
  35. for (var i = 0; i < pageCount; i++) {
  36. var pageLinkElem = $('<li><a href="#">' + (i+1) + '</a></li>');
  37. paginationList.append(pageLinkElem);
  38. }
  39. var nextLink = $('<li><a href="#">»</a></li>');
  40. paginationList.append(nextLink);
  41. footerElem.empty();
  42. footerElem.append(paginationList);
  43. }
  44. function renderPanel() {
  45. var rootElem = elem.find('.table-panel-scroll');
  46. var tbodyElem = elem.find('tbody');
  47. var footerElem = elem.find('.table-panel-footer');
  48. appendTableRows(tbodyElem);
  49. rootElem.css({'max-height': getTableHeight()});
  50. appendPaginationControls(footerElem);
  51. }
  52. scope.$on('render', function(event, renderData) {
  53. data = renderData || data;
  54. if (!data) {
  55. scope.get_data();
  56. return;
  57. }
  58. renderPanel();
  59. });
  60. }
  61. };
  62. }
  63. angular.module('grafana.directives').directive('grafanaPanelTable', tablePanel);
  64. angular.module('grafana.directives').directive('grafanaPanelTableEditor', tablePanelEditor);