2015-11-21 20:46:18 +08:00
|
|
|
///<reference path="../../../headers/common.d.ts" />
|
2015-11-03 00:00:47 +08:00
|
|
|
|
2015-11-05 05:44:08 +08:00
|
|
|
import kbn = require('app/core/utils/kbn');
|
|
|
|
|
2015-12-22 20:59:11 +08:00
|
|
|
import _ from 'lodash';
|
2015-12-18 02:18:30 +08:00
|
|
|
import $ from 'jquery';
|
|
|
|
import moment from 'moment';
|
2016-01-29 01:48:43 +08:00
|
|
|
import {PanelDirective} from '../../../features/panel/panel';
|
2015-11-05 05:44:08 +08:00
|
|
|
import {TablePanelCtrl} from './controller';
|
2015-11-06 01:42:47 +08:00
|
|
|
import {TableRenderer} from './renderer';
|
2015-11-03 15:18:35 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
class TablePanel extends PanelDirective {
|
2016-02-02 01:19:02 +08:00
|
|
|
templateUrl = 'public/app/plugins/panel/table/module.html';
|
2016-01-29 01:48:43 +08:00
|
|
|
controller = TablePanelCtrl;
|
2015-11-11 23:40:36 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
link(scope, elem, attrs, ctrl) {
|
|
|
|
var data;
|
|
|
|
var panel = ctrl.panel;
|
|
|
|
var pageCount = 0;
|
|
|
|
var formaters = [];
|
2015-11-04 19:56:53 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
function getTableHeight() {
|
|
|
|
var panelHeight = ctrl.height || ctrl.panel.height || ctrl.row.height;
|
|
|
|
if (_.isString(panelHeight)) {
|
|
|
|
panelHeight = parseInt(panelHeight.replace('px', ''), 10);
|
|
|
|
}
|
|
|
|
if (pageCount > 1) {
|
|
|
|
panelHeight -= 28;
|
|
|
|
}
|
2015-11-04 19:56:53 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
return (panelHeight - 60) + 'px';
|
|
|
|
}
|
2015-11-10 15:38:34 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
function appendTableRows(tbodyElem) {
|
|
|
|
var renderer = new TableRenderer(panel, data, ctrl.dashboard.timezone);
|
|
|
|
tbodyElem.empty();
|
|
|
|
tbodyElem.html(renderer.render(ctrl.pageIndex));
|
|
|
|
}
|
2015-11-11 23:40:36 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
function switchPage(e) {
|
|
|
|
var el = $(e.currentTarget);
|
|
|
|
ctrl.pageIndex = (parseInt(el.text(), 10)-1);
|
|
|
|
renderPanel();
|
|
|
|
}
|
2015-11-11 23:40:36 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
function appendPaginationControls(footerElem) {
|
|
|
|
footerElem.empty();
|
2015-11-04 19:56:53 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
var pageSize = panel.pageSize || 100;
|
|
|
|
pageCount = Math.ceil(data.rows.length / pageSize);
|
|
|
|
if (pageCount === 1) {
|
|
|
|
return;
|
2015-11-04 19:56:53 +08:00
|
|
|
}
|
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
var startPage = Math.max(ctrl.pageIndex - 3, 0);
|
|
|
|
var endPage = Math.min(pageCount, startPage + 9);
|
2015-11-03 15:18:35 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
var paginationList = $('<ul></ul>');
|
2015-11-24 17:03:52 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
for (var i = startPage; i < endPage; i++) {
|
|
|
|
var activeClass = i === ctrl.pageIndex ? 'active' : '';
|
|
|
|
var pageLinkElem = $('<li><a class="table-panel-page-link pointer ' + activeClass + '">' + (i+1) + '</a></li>');
|
|
|
|
paginationList.append(pageLinkElem);
|
2015-11-03 00:00:47 +08:00
|
|
|
}
|
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
footerElem.append(paginationList);
|
|
|
|
}
|
|
|
|
|
|
|
|
function renderPanel() {
|
|
|
|
var panelElem = elem.parents('.panel');
|
|
|
|
var rootElem = elem.find('.table-panel-scroll');
|
|
|
|
var tbodyElem = elem.find('tbody');
|
|
|
|
var footerElem = elem.find('.table-panel-footer');
|
2015-11-11 23:40:36 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
elem.css({'font-size': panel.fontSize});
|
|
|
|
panelElem.addClass('table-panel-wrapper');
|
2015-11-11 23:40:36 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
appendTableRows(tbodyElem);
|
|
|
|
appendPaginationControls(footerElem);
|
2015-11-11 23:40:36 +08:00
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
rootElem.css({'max-height': panel.scroll ? getTableHeight() : '' });
|
2015-11-03 00:00:47 +08:00
|
|
|
}
|
2016-01-29 01:48:43 +08:00
|
|
|
|
|
|
|
elem.on('click', '.table-panel-page-link', switchPage);
|
|
|
|
|
|
|
|
scope.$on('$destroy', function() {
|
|
|
|
elem.off('click', '.table-panel-page-link');
|
|
|
|
});
|
|
|
|
|
|
|
|
scope.$on('render', function(event, renderData) {
|
|
|
|
data = renderData || data;
|
2016-01-29 05:48:37 +08:00
|
|
|
if (data) {
|
|
|
|
renderPanel();
|
|
|
|
}
|
2016-01-29 01:48:43 +08:00
|
|
|
});
|
|
|
|
}
|
2015-11-03 00:00:47 +08:00
|
|
|
}
|
|
|
|
|
2016-01-29 01:48:43 +08:00
|
|
|
export {
|
|
|
|
TablePanel,
|
|
|
|
TablePanel as Panel
|
|
|
|
};
|