teleport/server/www/teleport/static/js/ui/controls.js

1673 lines
50 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*! ywl v1.0.1, (c)2015 eomsoft.net */
"use strict";
ywl.create_table = function (table_options) {
var _tbl = {};
// 此表格绑定的DOM对象的ID用于JQuery的选择器
_tbl.selector = table_options.selector;
_tbl.options = table_options;
_tbl.column_count = _tbl.options.columns.length;
_tbl.row_data = [];
_tbl.total = 0; // 记录总数
_tbl.page_index = 0; // 当前页数基数为0
_tbl.per_page = 25; // 每页显示的记录数量
// 表头
_tbl.header_ctrl = null;
// 关联的分页控件(一个表格只有一个分页控件)
_tbl.paging_ctrl = null;
// 关联的过滤器控件(一个表格可以有多个过滤器控件)
_tbl.filter_ctrls = [];
_tbl.render = null;//ywl.create_table_render(self, self.options.on_render_created || null);
//=======================
// 需要被重载的函数
//=======================
_tbl.on_data_loaded = function (cb_stack, cb_args) {
cb_stack.exec();
};
_tbl.on_cell_created = function (row_id, col_key, obj) {
//log.v('on_cell_created:', row_id, col_key, obj);
};
_tbl.init = function (cb_stack, cb_args) {
// 表格创建完成后加入表格的body部分这样就可以在没有表头的情况下创建表格了
cb_stack.add(_tbl._make_body);
// 创建表格渲染器
_tbl.render = ywl.create_table_render(_tbl, _tbl.on_render_created || null);
// 根据需要创建表头并初始化
if (_tbl.options.have_header) {
//log.v(' ======== create header.', _tbl.options.on_header_created);
_tbl.header_ctrl = ywl.create_table_header(_tbl, _tbl.options.on_header_created || null);
cb_stack.add(_tbl.header_ctrl.init);
}
// 如果设置了分页控件的属性,那么创建分页控件并初始化
if (_tbl.options.have_paging) {
_tbl.paging_ctrl = ywl.create_table_paging(_tbl, _tbl.on_paging_created || null);
cb_stack.add(_tbl.paging_ctrl.init);
}
// 对每一个过滤器进行初始化
for (var i = 0, cnt = _tbl.filter_ctrls.length; i < cnt; ++i) {
//$.each(self.filter_ctrls, function (i, f) {
if (_.isFunction(_tbl.filter_ctrls[i].init)) {
cb_stack.add(_tbl.filter_ctrls[i].init);
}
}
// 执行初始化函数链
cb_stack.exec();
};
_tbl._make_body = function (cb_stack) {
$(_tbl.selector).append($('<tbody></tbody>'));
cb_stack.exec();
};
_tbl.destroy = function (cb_stack) {
$(_tbl.selector).empty();
cb_stack.exec();
};
_tbl._fix_options = function () {
if (!_.isUndefined(_tbl.options.column_default)) {
for (var i = 0, cnt = _tbl.options.columns.length; i < cnt; ++i) {
for (var k in _tbl.options.column_default) {
if (_tbl.options.column_default.hasOwnProperty(k)) {
if (_.isUndefined(_tbl.options.columns[i][k])) {
_tbl.options.columns[i][k] = _tbl.options.column_default[k];
}
}
}
if (_.isUndefined(_tbl.options.columns[i]['fields'])) {
_tbl.options.columns[i]['fields'] = {};
_tbl.options.columns[i]['fields'][_tbl.options.columns[i]['key']] = _tbl.options.columns[i]['key'];
}
if (_.isUndefined(_tbl.options.columns[i]['sort_asc'])) {
_tbl.options.columns[i]['sort_asc'] = true;
}
if (_.isUndefined(_tbl.options.columns[i]['recreate'])) {
_tbl.options.columns[i]['recreate'] = true;
}
}
}
if (_.isUndefined(_tbl.options.sort)) {
_tbl.options.sort = 'remote';
}
if (_.isUndefined(_tbl.options.have_header)) {
_tbl.options.have_header = true;
}
_tbl.options.have_paging = !_.isUndefined(_tbl.options.paging);
//if (_.isUndefined(_tbl.options.paging)) {
// _tbl.options.have_paging = false;
//} else {
// _tbl.options.have_paging = true;
//}
};
//=====================================================================
// 关联控件相关操作
//=====================================================================
_tbl.append_filter_ctrl = function (filter_ctrl) {
_tbl.filter_ctrls.push(filter_ctrl);
};
//=====================================================================
// 过滤器相关操作
//=====================================================================
_tbl.reset_filters = function (cb_stack, cb_args) {
for (var i = 0, cnt = _tbl.filter_ctrls.length; i < cnt; ++i) {
if (_.isFunction(_tbl.filter_ctrls[i].reset)) {
cb_stack.add(_tbl.filter_ctrls[i].reset);
}
}
cb_stack.exec();
};
//=====================================================================
// 功能
//=====================================================================
_tbl.load_data = function (cb_stack, cb_args) {
//log.v('load table data.', cb_args);
if (_tbl.paging_ctrl)
_tbl.per_page = _tbl.paging_ctrl.get_per_page();
else
_tbl.per_page = 0;
_tbl.load_begin(1500);
var _filter = {};
// 对每一个关联的过滤器,获取其设置
for (var i = 0, _filter_count = _tbl.filter_ctrls.length; i < _filter_count; ++i) {
var _f = _tbl.filter_ctrls[i].get_filter();
//$.each(_f, function (i, v) {
// _filter[v.k] = v.v;
//});
for (var _filter_key in _f) {
if (_f.hasOwnProperty(_filter_key))
_filter[_filter_key] = _f[_filter_key];
}
}
var _order = null;
if (_tbl.header_ctrl) {
_order = _tbl.header_ctrl.get_order();
}
var _limit = {};
_limit.page_index = _tbl.page_index;
_limit.per_page = _tbl.per_page;
//log.d('when load, filter:', _filter);
//log.d('when load, order:', _order);
//log.d('when load, limit:', _limit);
// 根据数据源的设定加载数据
if (_tbl.options.data_source) {
if (_tbl.options.data_source.type === 'none') {
// 外部直接调用set_data()方法来设置数据,无需本控件主动获取
} else if (_tbl.options.data_source.type === 'callback') {
// 调用一个函数来加载数据
//cb_stack.add(self.load_end);
//cb_stack.add(self.set_data);
_tbl.options.data_source.fn(cb_stack, {table: _tbl, filter: _filter, order: _order, limit: _limit});
} else if (_tbl.options.data_source.type === 'ajax-post') {
var _url = _tbl.options.data_source.url;
ywl.ajax_post_json(_url, {filter: _filter, order: _order, limit: _limit},
function (ret) {
log.d('ajax-return:', ret);
if (ret.code !== TPE_OK) {
ywl.notify_error('');
} else {
//self.total = ret.data.total;
//self.page_index = ret.data.page_index;
cb_stack.add(_tbl.load_end);
_tbl.set_data(cb_stack, {}, {total: ret.data.total, page_index: ret.data.page_index, data: ret.data.data});
}
},
function () {
_tbl.show_load_failed();
}
);
} else {
log.e('table-options [data-source] type [' + _tbl.options.data_source.type + '] known.');
}
//return;
} else {
log.e('have no idea for load table data. need data_source.');
}
};
_tbl._render_row = function (row_data, pos_row_id) {
var _pos = -1; // 0=插入到第一行,-1=插入到最后一行(默认),其他=插入到指定row_id的行之后如果没有找到指定的行则插入到最后
if (!_.isUndefined(pos_row_id)) {
_pos = pos_row_id;
}
var dom_obj = $(_tbl.selector + ' tbody');
var node = '<tr';
if (_tbl.options.row_key) {
$.each(_tbl.options.row_key, function (ki, kv) {
node += ' ywl-key-' + kv + '="' + row_data[kv] + '"';
});
}
node += ' ywl-row-id="' + row_data.ywl_row_id + '"';
node += '>';
for (var i = 0, cnt = _tbl.options.columns.length; i < cnt; ++i) {
var col = _tbl.options.columns[i];
node += '<td';
var _style = ' style="';
var _have_style = false;
if (col.cell_align != 'center') {
_style += 'text-align:' + col.cell_align + ';';
_have_style = true;
}
if (col.width) {
_style += 'width:' + col.width + 'px;';
_have_style = true;
}
if (_have_style) {
_style += '"';
node += _style;
}
node += '>';
var k;
if (_.isUndefined(col.render)) {
if (_.isUndefined(col.fields) || _.isEmpty(col.fields)) {
node += row_data[col.key];
} else {
var _tmp = [];
for (k in col.fields) {
if (col.fields.hasOwnProperty(k))
_tmp.push(row_data[col.fields[k]]);
}
node += _tmp.join(' ');
}
} else {
if (_.isFunction(_tbl.render[col.render])) {
var _args = {};
for (k in col.fields) {
if (col.fields.hasOwnProperty(k))
_args[k] = row_data[col.fields[k]];
}
node += _tbl.render[col.render](row_data.ywl_row_id, _args);
}
}
node += '</td>';
}
node += '</tr>';
var _tr = $(node);
_tr.data('ywl-row-data', row_data);
if (_pos == -1) {
dom_obj.append(_tr);
} else if (_pos == 0) {
dom_obj.prepend(_tr);
} else {
var _pos_obj = $(dom_obj).find("[ywl-row-id='" + _pos + "']");
if (0 == _pos_obj[0]) {
// 没有找到指定行,则加入到最后
dom_obj.append(_tr);
} else {
// 找到了指定行,则尾随其后
_pos_obj.after(_tr);
}
}
// callback for each cell.
if (_.isFunction(_tbl.on_cell_created)) {
var _cell_objs = $(_tbl.selector + " [ywl-row-id='" + row_data.ywl_row_id + "'] td");
for (i = 0, cnt = _cell_objs.length; i < cnt; ++i) {
_tbl.on_cell_created(row_data.ywl_row_id, _tbl.options.columns[i].key, $(_cell_objs[i]));
}
}
if (_.isFunction(_tbl.on_row_created)) {
var _row_obj = $(_tbl.selector + " [ywl-row-id='" + row_data.ywl_row_id + "']")[0];
_tbl.on_row_created(row_data.ywl_row_id, $(_row_obj));
}
};
_tbl._render_rows = function (row_datas, pos_row_id) {
var _pos = -1; // 0=插入到第一行,-1=插入到最后一行(默认),其他=插入到指定row_id的行之后如果没有找到指定的行则插入到最后
if (!_.isUndefined(pos_row_id)) {
_pos = pos_row_id;
}
if (!_.isArray(row_datas)) {
row_datas = [row_datas]
}
var dom_obj = $(_tbl.selector + ' tbody');
var node = [];
var r;
var k = null;
//var k = 0;
//var key_count = _tbl.options.row_key.length;
var row_count = row_datas.length;
for (r = 0; r < row_count; ++r) {
node.push('<tr');
if (_tbl.options.row_key) {
// $.each(_tbl.options.row_key, function (ki, kv) {
// node += ' ywl-key-' + kv + '="' + row_data[kv] + '"';
// });
for (k in _tbl.options.row_key) {
if (_tbl.options.row_key.hasOwnProperty(k))
node.push(' ywl-key-' + k + '="' + row_datas[r][k] + '"');
}
}
node.push(' id="row-' + row_datas[r].ywl_row_id + '"');
node.push(' ywl-row-id="' + row_datas[r].ywl_row_id + '">');
for (var i = 0, cnt = _tbl.options.columns.length; i < cnt; ++i) {
var col = _tbl.options.columns[i];
//node.push('<td');
node.push('<td id="cell-' + row_datas[r].ywl_row_id + '-' + i + '"');
var _style = ' style="';
var _have_style = false;
if (col.cell_align != 'center') {
_style += 'text-align:' + col.cell_align + ';';
_have_style = true;
}
//if (col.width) {
// _style += 'width:' + col.width + 'px;';
// _have_style = true;
//}
if (_have_style) {
_style += '"';
node.push(_style);
}
node.push('>');
//node.push('<td id="cell-'+row_datas[r].ywl_row_id+'-'+i+'">');
if (_.isUndefined(col.render)) {
if (_.isUndefined(col.fields) || _.isEmpty(col.fields)) {
//node += row_data[col.key];
node.push(row_datas[r][col.key])
} else {
var _tmp = [];
for (k in col.fields) {
if (col.fields.hasOwnProperty(k))
_tmp.push(row_datas[r][col.fields[k]]);
}
node.push(_tmp.join(' '));
}
} else {
if (_.isFunction(_tbl.render[col.render])) {
var _args = {};
for (k in col.fields) {
if (col.fields.hasOwnProperty(k))
_args[k] = row_datas[r][col.fields[k]];
}
node.push(_tbl.render[col.render](row_datas[r].ywl_row_id, _args));
}
}
node.push('</td>');
}
node.push('</tr>');
}
var _tr = $(node.join(''));
if (_pos == -1) {
dom_obj.append(_tr);
} else if (_pos == 0) {
dom_obj.prepend(_tr);
} else {
var _pos_obj = $(dom_obj).find("[ywl-row-id='" + _pos + "']");
if (0 == _pos_obj[0]) {
// 没有找到指定行,则加入到最后
dom_obj.append(_tr);
} else {
// 找到了指定行,则尾随其后
_pos_obj.after(_tr);
}
}
//// callback for each cell.
//if (_.isFunction(_tbl.on_cell_created)) {
// var _cell_objs = $(_tbl.selector + " [ywl-row-id='" + row_datas[r].ywl_row_id + "'] td");
// for (i = 0, cnt = _cell_objs.length; i < cnt; ++i) {
// _tbl.on_cell_created(row_datas[r].ywl_row_id, _tbl.options.columns[i].key, $(_cell_objs[i]));
// }
//}
//
//if (_.isFunction(_tbl.on_row_created)) {
// var _row_obj = $(_tbl.selector + " [ywl-row-id='" + row_datas[r].ywl_row_id + "']")[0];
// _tbl.on_row_created(row_datas[r].ywl_row_id, $(_row_obj));
//}
var _have_cell_created = _.isFunction(_tbl.on_cell_created);
var _have_row_created = _.isFunction(_tbl.on_row_created);
//if (_have_cell_created || _have_row_created) {
for (r = 0; r < row_count; ++r) {
var _row_obj = $('#row-' + row_datas[r].ywl_row_id);
_row_obj.data('ywl-row-data', row_datas[r]);
if (_have_cell_created) {
for (i = 0, cnt = _tbl.options.columns.length; i < cnt; ++i) {
_tbl.on_cell_created(row_datas[r].ywl_row_id, _tbl.options.columns[i].key, $('#cell-' + row_datas[r].ywl_row_id + '-' + i));
}
}
if (_have_row_created) {
_tbl.on_row_created(row_datas[r].ywl_row_id, _row_obj);
}
}
//}
};
_tbl.render_table = function (cb_stack, cb_args) {
var dom_obj = $(_tbl.selector + ' tbody');
if (_tbl.row_data.length == 0) {
_tbl.show_empty_table();
cb_stack.exec();
return;
} else {
dom_obj.empty();
}
_tbl._render_rows(_tbl.row_data);
cb_stack.exec();
};
_tbl.set_data = function (cb_stack, cb_args, ex_args) {
_tbl.row_data = ex_args.data || [];
_tbl.total = ex_args.total || _tbl.row_data.length;
_tbl.page_index = ex_args.page_index || 0;
// 我们为表格的每一行数据加入我们自己的索引
for (var i = 0, cnt = _tbl.row_data.length; i < cnt; ++i) {
if (_.isUndefined(_tbl.row_data[i].ywl_row_id)) {
_tbl.row_data[i].ywl_row_id = _.uniqueId();
}
if (_.isFunction(_tbl.on_set_row_data)) {
_tbl.on_set_row_data(_tbl.row_data[i]);
}
}
cb_stack
.add(_tbl.on_data_loaded)
.add(_tbl.update_paging)
.add(_tbl.render_table)
.exec();
};
_tbl.get_row = function (obj) {
//log.v('get-row, obj=', obj);
if (_.isElement(obj)) {
var _tr = null;
if ($(obj).prop('tagName') == 'TR') {
_tr = $(obj);
} else if ($(obj).prop('tagName') == 'TD') {
_tr = $($(obj).parent()[0]);
} else {
_tr = $($(obj).parentsUntil($('tr')).parent()[0]);
}
return _tr.data('ywl-row-data');
} else if (_.isString(obj)) {
for (var i = 0, cnt = _tbl.row_data.length; i < cnt; ++i) {
if (_tbl.row_data[i].ywl_row_id == obj) {
return _tbl.row_data[i];
}
}
return null;
} else {
log.e('need an element.');
return null;
}
};
_tbl.update_row = function (row_id, kv) {
//log.v('kv', kv);
var _row_data = $($(_tbl.selector + " [ywl-row-id='" + row_id + "']")[0]).data('ywl-row-data');
for (var k in kv) {
if (kv.hasOwnProperty(k)) {
if (_.isUndefined(_row_data[k])) {
return false;
} else {
_row_data[k] = kv[k];
}
}
}
// 根据columns的设置更新界面元素
for (var i in _tbl.options.columns) {
if (!_tbl.options.columns.hasOwnProperty(i))
continue;
var col = _tbl.options.columns[i];
for (k in kv) {
if (!kv.hasOwnProperty(k))
continue;
//log.v('k:', k, 'fields:', col.fields, 'chk:', _.contains(col.fields, k));
//if (_.contains(col.fields, k) != -1) {
if (_.contains(col.fields, k)) {
var _cell = $($(_tbl.selector + " [ywl-row-id='" + row_id + "'] td")[i]);
if (col.recreate) {
if (_.isFunction(_tbl.on_cell_created)) {
var node = '';
if (_.isUndefined(col.render)) {
node += _row_data[col.key];
} else {
if (_.isFunction(_tbl.render[col.render])) {
var _args = {};
for (var f in col.fields) {
if (col.fields.hasOwnProperty(f))
_args[f] = _row_data[col.fields[f]];
}
node += _tbl.render[col.render](row_id, _args);
}
}
_cell.html(node);
_tbl.on_cell_created(row_id, col.key, _cell);
}
} else {
//log.v('update-row.', col.key);
if (_.isFunction(_tbl.on_cell_update)) {
_tbl.on_cell_update(row_id, col.key, _cell);
}
}
//if (col.recreate) {
// _cell.html(node);
// _tbl.on_cell_created(row_id, col.key, _cell);
//} else {
// log.v('update-row.', col.key);
// _tbl.on_cell_created(row_id, col.key, _cell);
//}
break;
}
}
}
};
// 参数pos_row_id: 0=插入到第一行,-1=插入到最后一行(默认),其他=插入到指定row_id的行之后如果没有找到指定的行则插入到最后
_tbl.add_row = function (rows, pos_row_id, fn_is_duplicated) {
var ret_row_id = [];
var _fn = fn_is_duplicated || null;
var _new_count = rows.length;
for (var i = 0; i < _new_count; ++i) {
var _my_count = _tbl.row_data.length;
var _is_duplicated = false;
for (var j = 0; j < _my_count; ++j) {
if (_fn) {
if (_fn(rows[i], _tbl.row_data[j])) {
_is_duplicated = true;
break;
}
} else {
if (rows[i] == _tbl.row_data[j]) {
_is_duplicated = true;
break;
}
}
}
if (!_is_duplicated) {
//if(_.isUndefined(rows[i].ywl_row_id)) {
// rows[i].ywl_row_id = _.uniqueId();
//}
rows[i].ywl_row_id = _.uniqueId();
ret_row_id.push(rows[i].ywl_row_id);
_tbl.row_data.push(rows[i]);
if (_.isFunction(_tbl.on_set_row_data)) {
_tbl.on_set_row_data(rows[i]);
}
_tbl._render_row(rows[i], pos_row_id);
} else {
ret_row_id.push(-1);
}
}
return ret_row_id;
};
_tbl.remove_row = function (row_id) {
var _index = -1;
for (var i = 0, cnt = _tbl.row_data.length; i < cnt; ++i) {
if (_tbl.row_data[i]['ywl_row_id'] == row_id) {
_index = i;
break;
}
}
if (_index == -1) {
return false;
}
_tbl.row_data.splice(_index, 1);
$(_tbl.selector + ' tbody [ywl-row-id="' + row_id + '"]').remove();
//var row_dom = $(_tbl.selector + ' tbody [ywl-row-id="' + row_id + '"]');
//row_dom.fadeOut('normal', function(){
// $(this).remove();
//});
return true;
};
_tbl.clear = function () {
$(_tbl.selector + ' tbody').empty();
_tbl.row_data = [];
var cb_stack = CALLBACK_STACK.create();
cb_stack
.add(_tbl.on_data_loaded)
.add(_tbl.update_paging)
.exec();
//self.render_table(cb_stack);
};
_tbl.reload = function () {
_tbl.load_data(CALLBACK_STACK.create(), {});
};
_tbl.load_begin = function (delay_) {
var _delay = delay_ || 1000;
_tbl.show_loading(_delay);
};
_tbl.load_end = function (cb_stack) {
if (_tbl.loading_timer != null) {
clearTimeout(_tbl.loading_timer);
_tbl.loading_timer = null;
}
cb_stack.exec();
};
_tbl.show_loading = function (delay_) {
var _delay = delay_ || 0;
if (_delay > 0) {
if (_tbl.loading_timer == null) {
_tbl.loading_timer = setTimeout(function () {
_tbl.show_loading();
}, _delay);
return;
}
}
var msg_loading = '<tr role="row"><td class="loading" colspan="' + _tbl.column_count + '"><i class="fa fa-circle-o-notch fa-spin"></i> 加载中,请稍候...</td></tr>';
$(_tbl.selector + ' tbody').prepend($(msg_loading))
};
_tbl.show_load_failed = function () {
if (_tbl.loading_timer != null) {
clearTimeout(_tbl.loading_timer);
_tbl.loading_timer = null;
}
var msg_loading = '<tr role="row"><td class="loading" colspan="' + _tbl.column_count + '"><i class="fa fa-circle-o-notch fa-fw"></i> 天啦撸!加载失败...</td></tr>';
$(_tbl.selector + ' tbody').empty().append($(msg_loading))
};
_tbl.show_empty_table = function () {
if (_tbl.loading_timer != null) {
clearTimeout(_tbl.loading_timer);
_tbl.loading_timer = null;
}
var msg_loading = '<tr role="row"><td class="loading" colspan="' + _tbl.column_count + '"><i class="fa fa-circle-o-notch fa-fw"></i> 哇哦,没有数据哦...</td></tr>';
$(_tbl.selector + ' tbody').empty().append($(msg_loading))
};
_tbl.update_paging = function (cb_stack, cb_args) {
if (_tbl.paging_ctrl) {
_tbl.paging_ctrl.update(cb_stack, {total: _tbl.total, page_index: _tbl.page_index, per_page: _tbl.per_page});
} else {
cb_stack.exec();
}
};
_tbl.paging_prev = function () {
if (_tbl.page_index == 0)
return;
_tbl.page_index -= 1;
_tbl.load_data(CALLBACK_STACK.create(), {});
};
_tbl.paging_next = function () {
_tbl.page_index += 1;
_tbl.load_data(CALLBACK_STACK.create(), {});
};
_tbl.paging_jump = function (page_index) {
_tbl.page_index = page_index || 0;
_tbl.load_data(CALLBACK_STACK.create(), {});
};
_tbl._fix_options();
if (_.isFunction(_tbl.options.on_created)) {
_tbl.options.on_created(_tbl);
}
return _tbl;
};
// TODO: to create fixed header (not scroll), see https://github.com/markmalek/Fixed-Header-Table
ywl.create_table_header = function (tbl, on_created) {
var _tbl_header = {};
_tbl_header.selector = tbl.selector;
_tbl_header._table_ctrl = tbl;
//table_ctrl.header_ctrl = self;
_tbl_header._columns = tbl.options.columns;
_tbl_header.order_by = ''; // 排序字段(不一定对应数据库的字段,可能需要对应转换)
_tbl_header.order_asc = true; // 是否以升序排列
_tbl_header.get_order = function () {
if (_tbl_header.order_by == '') {
return null;
} else {
return {k: _tbl_header.order_by, v: _tbl_header.order_asc};
}
};
_tbl_header.init = function (cb_stack, cb_args) {
// 从cookie中取得排序规则
_tbl_header.order_by = null
//log.d('order_by from cookie:', _tbl_header.order_by);
if (_tbl_header.order_by == null) {
_tbl_header.order_by = '';
}
var _first_sort = '';
var _found = false;
$.each(_tbl_header._columns, function (i, col) {
if (col.sort) {
if (_first_sort == '') {
_first_sort = col.key;
//log.v('first_sort', col.key);
}
if (_tbl_header.order_by == col.key) {
_found = true;
return false; // 跳出循环
}
}
});
if (!_found) {
_tbl_header.order_by = _first_sort;
_tbl_header.order_asc = true;
} else {
_tbl_header.order_asc = ywl.assist.get_cookie('order_asc');
if (_tbl_header.order_asc == null) {
_tbl_header.order_asc = true;
}
}
//log.v('table header:', self.order_by, self.order_asc);
// 创建表格头
var _dom_head = '<thead></tr>';
$.each(_tbl_header._columns, function (i, col) {
if (col.sort) {
_dom_head += '<th class="';
if (_tbl_header.order_by == col.key) {
if (_tbl_header.order_asc)
_dom_head += 'sorting_asc';
else
_dom_head += 'sorting_desc';
} else {
_dom_head += 'sorting';
}
_dom_head += '" ywl-table-col-key="' + col.key + '"';
} else {
_dom_head += '<th';
}
var _style = ' style="';
var _have_style = false;
if (col.header_align != 'center') {
//_dom_head += ' align="'+col.header_align+'"';
_style += 'text-align:' + col.header_align + ';';
_have_style = true;
}
if (col.width) {
_style += 'width:' + col.width + 'px;';
_have_style = true;
}
//_dom_head += ' style="width:' + col.width + 'px;"';
//_dom_head += '><span>' + col.title + '</span></th>';
if (_have_style) {
_style += '"';
_dom_head += _style;
}
_dom_head += ' data-key="' + col.key + '"><span>' + col.title + '</span></th>';
});
_dom_head += '</tr></thead>';
//log.v('header dom-id:', self.selector);
$(_tbl_header.selector).append($(_dom_head));
// 为标题栏设置点击回调函数(点击可排序)
$(_tbl_header.selector + ' th.sorting').click(_tbl_header.click_header);
$(_tbl_header.selector + ' th.sorting_asc').click(_tbl_header.click_header);
$(_tbl_header.selector + ' th.sorting_desc').click(_tbl_header.click_header);
if (_.isFunction(on_created)) {
on_created(_tbl_header);
}
cb_stack.exec();
};
_tbl_header.click_header = function () {
var t = $(this).attr('ywl-table-col-key');
_tbl_header.on_head_click(t);
};
// 点击表格分栏,默认操作为按此栏进行升序/降序排序
_tbl_header.on_head_click = function (col_key) {
var i = 0;
if (col_key == _tbl_header.order_by) {
if (_tbl_header.order_asc) {
$(_tbl_header.selector + ' th.sorting_asc').removeClass('sorting_asc').addClass('sorting_desc');
} else {
$(_tbl_header.selector + ' th.sorting_desc').removeClass('sorting_desc').addClass('sorting_asc');
}
_tbl_header.order_asc = !_tbl_header.order_asc;
} else {
$(_tbl_header.selector + ' th.sorting_asc').removeClass('sorting_asc').addClass('sorting');
$(_tbl_header.selector + ' th.sorting_desc').removeClass('sorting_desc').addClass('sorting');
$(_tbl_header.selector + " [ywl-table-col-key='" + col_key + "']").removeClass('sorting').addClass('sorting_asc');
_tbl_header.order_by = col_key;
var order_asc = true;
for (i = 0; i < _tbl_header._table_ctrl.column_count; ++i) {
if (_tbl_header._table_ctrl.options.columns[i].key == col_key) {
order_asc = _tbl_header._table_ctrl.options.columns[i].sort_asc;
log.v('-----', order_asc);
break;
}
}
if (order_asc) {
$(_tbl_header.selector + " [ywl-table-col-key='" + col_key + "']").removeClass('sorting').addClass('sorting_asc');
} else {
$(_tbl_header.selector + " [ywl-table-col-key='" + col_key + "']").removeClass('sorting').addClass('sorting_desc');
}
_tbl_header.order_asc = order_asc;
}
var cb_stack = CALLBACK_STACK.create();
if (_tbl_header._table_ctrl.options.sort == 'local') {
//cb_stack.add(ywl.assist.set_cookie, {k: 'order_by', v: _tbl_header.order_asc});
log.v('sort-by:', col_key);
var data = _.sortBy(_tbl_header._table_ctrl.row_data, col_key);
if (_tbl_header.order_asc) {
_tbl_header._table_ctrl.set_data(cb_stack, {}, {data: data});
} else {
var tmp = [];
for (i = data.length - 1; i >= 0; --i) {
tmp.push(data[i]);
}
_tbl_header._table_ctrl.set_data(cb_stack, {}, {data: tmp});
}
} else {
cb_stack
//.add(ywl.assist.set_cookie, {k: 'order_by', v: _tbl_header.order_asc})
.add(_tbl_header._table_ctrl.load_data)
.exec();
//ywl.assist.set_cookie(cb_stack, {k: 'order_by', v: _tbl_header.order_asc});
}
};
return _tbl_header;
};
ywl.create_table_render = function (tbl, on_created) {
var _tbl_render = {};
_tbl_render.fs_name = function (row_id, fields) {
//if(fields.type == 2) {
// return '<a href="javascript:void(0);" onclick="open_folder();"><span class="icon icon16 icon-' + fields.icon + '"></span> <span ywl-field="name">' + fields.name + '</span></a>';
//}
//
return '<span ywl-field="icon-and-name"><span class="icon icon16 icon-' + fields.icon + '"></span> <span ywl-field="name">' + fields.name + '</span></span>';
};
_tbl_render.pl_desc = function (row_id, fields) {
//if(fields.type == 2) {
// return '<a href="javascript:void(0);" onclick="open_folder();"><span class="icon icon16 icon-' + fields.icon + '"></span> <span ywl-field="name">' + fields.name + '</span></a>';
//}
//
var _desc = '未知';
if (fields.pl == 0) {
_desc = '来宾';
} else if (fields.pl == 1) {
_desc = '普通用户';
} else if (fields.pl == 2) {
_desc = '管理员';
}
return '<span ywl-field="pl-desc">' + _desc + '</span>';
};
_tbl_render.fs_size = function (row_id, fields) {
if (fields.type == 0 || fields.type == 2) {
return '';
}
return size2str(fields.size, 2);
};
_tbl_render.date_time = function (row_id, fields) {
if (0 == fields.timestamp) {
return '';
}
return '<span class="datetime">' + format_datetime(utc_to_local(fields.timestamp)) + '</span>';
};
_tbl_render.date_time_local = function (row_id, fields) {
if (0 == fields.timestamp) {
return '';
}
return '<span class="datetime">' + format_datetime(fields.timestamp) + '</span>';
};
_tbl_render.log_content = function (row_id, fields) {
var _func = ywl_log_analysis[fields.cmd_id];
var _content = fields.content;
if (_func != undefined) {
_content = _func(fields.content);
}
return '<span class="log-content">' + _content + '</span>';
};
_tbl_render.host_id = function (row_id, fields) {
var ret = '';
ret = '<span class="host-id">' + fields.id + '</span>';
ret += '<span class="host-desc">' + fields.desc + '</span>';
return ret;
};
// _tbl_render.host_status = function (row_id, fields) {
// if (fields.status == HOST_STAT_ACTIVE) {
// switch (fields.online) {
// case AGENT_STAT_ONLINE:
// return '<span class="badge badge-success">在线</span>';
// case AGENT_STAT_OFFLINE:
// return '<span class="badge badge-danger">离线</span>';
// default:
// return '<span class="badge badge-warning">未知</span>';
// }
// } else {
// return '<span class="badge badge-ignore">- 未使用 -</span>';
// }
// };
_tbl_render.sys_type = function (row_id, fields) {
switch (fields.sys_type) {
case 1:
return '<span class="os-icon-windows"></span>';
case 2:
return '<span class="os-icon-linux"></span>';
case 201:
return '<span class="os-icon-centos"></span>';
case 202:
return '<span class="os-icon-ubuntu"></span>';
case 203:
return '<span class="os-icon-debian"></span>';
case 204:
return '<span class="os-icon-redhat"></span>';
case 3:
case 300:
return '<span class="os-icon-macos"></span>';
default:
return '<span class="os-icon-linux"></span>';
}
};
_tbl_render.record_id = function (row_id, fields) {
return '<span ywl-record-id="' + row_id + '">' + fields.r_id + '</span>';
};
_tbl_render.host_group = function (row_id, fields) {
if (fields.status == HOST_STAT_NOT_ACTIVE)
return '-';
var g = get_host_group_by_id(fields.group);
if (g.id == 0)
return '- 未知分组 -';
else
return g.group_name;
};
// _tbl_render.command_info = function (row_id, fields) {
// var command = get_command_name_by_id(fields.cmd_id);
// if (command === null)
// return '命令 ' + fields.cmd_id;
// else
// //return '<a href="#" data-toggle="tooltip" title=\"' + command.cmd_name + '\">' + command.cmd_desc + '</a>';
// return '<span data-toggle="tooltip" title=\"' + command.cmd_name + '\">' + command.cmd_desc + '</span>';
// //var info = command.cmd_name + ' '+ command.cmd_desc;
// //return info;
// };
_tbl_render.user_info = function (row_id, fields) {
var user_info = get_user_info_by_id(fields.u_id);
if (user_info === null)
return '用户名:' + fields.u_id;
else
return user_info.nickname;
//var info = command.cmd_name + ' '+ command.cmd_desc;
//return info;
};
// _tbl_render.event_type = function (row_id, fields) {
// var _e_id = fields.id1 + '-' + fields.id2 + '-' + fields.id3 + '-' + fields.id4;
// var content = '';
// if (_e_id == '3-1-1-100') {
// content = '系统性能监控';
// return '<a href="#"> ' + content + '</a>';
// } else if (_e_id == '3-1-1-107') {
// content = 'TCP监听白名单监控';
// return '<a href="#"> ' + content + '</a>';
// } else if (_e_id == '3-1-1-108') {
// content = 'UDP白名单监控';
// return '<a href="#"> ' + content + '</a>';
// } else if (_e_id == '3-1-1-109') {
// content = 'TCP连接白名单监控';
// return '<a href="#"> ' + content + '</a>';
// } else if (_e_id == '3-1-1-110') {
// content = '进程白名单监控';
// return '<a href="#"> ' + content + '</a>';
// } else if (_e_id == '3-1-1-7') {
// content = '系统用户监控';
// return '<a href="#"> ' + content + '</a>';
// } else {
// content = '未知';
// return '<a href="#"> ' + content + '</a>';
// }
//
//
// //var info = command.cmd_name + ' '+ command.cmd_desc;
// //return info;
// };
_tbl_render.event_code = function (row_id, fields) {
var _e_id = fields.id1 + '-' + fields.id2 + '-' + fields.id3 + '-' + fields.id4;
var _e_info = get_event_code_by_id(_e_id);
var _tip = '';
if (_e_info === null)
_tip = '未知';
else
_tip = _e_info.event_desc;
return '<a href="#" ywl-eventcode=\"' + _e_id + '\" data-toggle="tooltip" title=\"' + _tip + '\">' + _e_id + '</a>';
};
_tbl_render.ret_code = function (row_id, fields) {
if (fields.code === 0)
return '<span class="label label-success">成功</span>';
else
var message = '失败(' + fields.code + ',' + fields.param1 + ',' + fields.param2 + ')';
return '<span class="label label-danger" data-toggle="tooltip" title= \"' + message + '\">' + message + '</span>';
//var info = command.cmd_name + ' '+ command.cmd_desc;
//return info;
};
_tbl_render.memory = function (row_id, fields) {
if (fields.status == HOST_STAT_NOT_ACTIVE)
return '-';
if (0 == fields.value)
return '';
return '<span class="badge bg-normal">' + size2str(fields.value, 0) + '</span>';
};
_tbl_render.ip = function (row_id, fields) {
if (fields.status == HOST_STAT_NOT_ACTIVE)
return '-';
var ret = '';
var _this_id = _.uniqueId('ip-list-');
if (fields.ip.length > 2) {
ret += '<div class="td-ip-show-more"><a href="javascript:;" onclick="ywl.toggle_display(\'#' + _this_id + '\');"><i class="fa fa-angle-down"></i></a></div>';
}
ret += '<div class="td-ip-list"><div class="td-ip">';
var idx, loop;
(fields.ip.length > 2) ? loop = 2 : loop = fields.ip.length;
for (idx = 0; idx < loop; ++idx) {
ret += '<div class="td-ip-item"><span>' + fields.ip[idx] + '</span>';
if (fields.ip.length > 1) {
// TODO暂不支持调整IP列表顺序功能
//ret += '<a href="#"><i class="fa fa-arrow-circle-up fa-fw"></i></a>';
}
ret += '</div>';
}
ret += '</div>';
if (fields.ip.length > 2) {
ret += '<div id="' + _this_id + '" class="td-ip-more" style="display:none;">';
for (idx = 2; idx < fields.ip.length; ++idx) {
ret += '<div class="td-ip-item"><span>' + fields.ip[idx] + '</span>';
// TODO暂不支持调整IP列表顺序功能
//ret += '<a href="#"><i class="fa fa-arrow-circle-up fa-fw"></i></a>';
ret += '</div>';
}
ret += '</div>';
}
return ret;
};
_tbl_render.disk = function (row_id, fields) {
if (fields.status == HOST_STAT_NOT_ACTIVE)
return '-';
var ret = '';
$.each(fields.disk, function (i, disk_size) {
ret += '<span class="badge bg-normal">' + size2str(disk_size, 2) + '</span> ';
});
return ret;
};
_tbl_render.second2str = function (row_id, fields) {
return '<i class="fa fa-clock-o fa-fw"></i> ' + second2str(fields.seconds);
};
_tbl_render.host_rate_show = function (row_id, fields) {
if (fields.value >= 90) {
return '<span class="badge badge-danger">' + fields.value + '</span>';
} else if (fields.value >= 50) {
return '<span class="badge badge-warning">' + fields.value + '</span>';
} else {
return '<span class="badge badge-success">' + fields.value + '</span>';
}
};
if (_.isFunction(on_created)) {
on_created(_tbl_render);
}
return _tbl_render;
};
ywl.create_table_paging = function (tbl, on_created) {
var _tbl_paging = {};
_tbl_paging.selector = tbl.options.paging.selector;
_tbl_paging.options = tbl.options.paging;
_tbl_paging._table_ctrl = tbl;
//self._table_ctrl.attach_paging_ctrl(self);
_tbl_paging._per_page = -1;
_tbl_paging.get_per_page = function () {
return _tbl_paging._per_page;
};
_tbl_paging.init = function (cb_stack, cb_args) {
_tbl_paging._per_page = -1;
if (_tbl_paging.options.per_page.use_cookie) {
_tbl_paging._per_page = 10|| -1;
}
if (_tbl_paging._per_page == -1) {
$.each(_tbl_paging.options.per_page.selections, function (i, s) {
if (s.name == _tbl_paging.options.per_page.default_select) {
_tbl_paging._per_page = s.val;
return false;
}
});
}
if (_tbl_paging._per_page == -1) {
_tbl_paging._per_page = _tbl_paging.options.per_page.selections[0].val;
}
if (_.isFunction(on_created)) {
on_created(_tbl_paging);
}
_tbl_paging._update_per_page(cb_stack);
};
_tbl_paging._update_per_page = function (cb_stack, cb_args) {
var node = '';
$.each(_tbl_paging.options.per_page.selections, function (i, p) {
if (_tbl_paging._per_page == p.val)
node += '<option selected>' + p.val + '</option>';
else
node += '<option>' + p.val + '</option>';
});
$(_tbl_paging.selector + " select").unbind('change').empty().append($(node));
$(_tbl_paging.selector + " select").change(function () {
var count = parseInt($(this).children('option:selected').val());
//log.v('per page', count);
var cb_stack = CALLBACK_STACK.create();
cb_stack.add(_tbl_paging._table_ctrl.load_data);
if (_tbl_paging.options.per_page.use_cookie) {
_tbl_paging._per_page = count;
//cb_stack.add(ywl.assist.set_cookie, {k: 'count_per_page', v: count});
}
cb_stack.exec();
});
cb_stack.exec();
};
_tbl_paging.update = function (cb_stack, cb_args) {
var _total = cb_args.total || 0;
var _page_index = cb_args.page_index || 0;
//var _per_page = cb_args.per_page || 25;
$(_tbl_paging.selector + " [ywl-field='recorder_total']").html(_total);
$(_tbl_paging.selector + " [ywl-field='page_current']").html(_page_index + 1);
// 计算总页数
//log.v('paging: total and per-page:', _total, self._per_page);
var _total_page = Math.ceil(_total / _tbl_paging._per_page);
$(_tbl_paging.selector + " [ywl-field='page_total']").html(_total_page);
//log.v('paging: page-index and total pages:', _page_index, _total_page);
var node = [];
// 分页显示规则:
// 总页数小于等于9的全部显示
// 总页数大于9的部分显示
// 第一页 上一页 ... x-4 x-3 x-2 x-1 x x+1 x+2 x+3 x+4 ... 下一页 最后一页
var _start = _page_index - 4;
if (_start < 0)
_start = 0;
var _end = _start + 9;
if (_end > _total_page)
_end = _total_page;
if (_total_page > 9) {
if (_page_index == 0)
node.push('<li class="disabled"><span><i class="fa fa-fast-backward fa-fw"></i></span></li>');
else
node.push('<li><a href="javascript:;" ywl-jump-page="0"><span><i class="fa fa-fast-backward fa-fw"></i></span></a></li>');
}
if (_page_index == 0)
node.push('<li class="disabled"><span><i class="fa fa-backward fa-fw"></i></span></li>');
else
node.push('<li><a href="javascript:;" ywl-action="paging-prev"><span><i class="fa fa-backward fa-fw"></i></span></a></li>');
if (_start > 0) {
node.push('<li class="disabled"><span><i class="fa fa-ellipsis-h fa-fw"></i></span></li>');
}
for (var i = _start; i < _end; ++i) {
if (i == _page_index)
node.push('<li class="disabled"><span><strong>' + (i + 1) + '</strong></span></li>');
else
node.push('<li><a href="javascript:;" ywl-jump-page="' + i + '">' + (i + 1) + '</a></li>');
}
if (_end < _total_page - 1) {
node.push('<li class="disabled"><span><i class="fa fa-ellipsis-h fa-fw"></i></span></li>');
}
if (_page_index == _total_page - 1)
node.push('<li class="disabled"><span><i class="fa fa-forward fa-fw"></i></span></li>');
else
node.push('<li><a href="javascript:;" ywl-action="paging-next"><span><i class="fa fa-forward fa-fw"></i></span></a></li>');
if (_total_page > 9) {
if (_page_index == _total_page - 1)
node.push('<li class="disabled"><span><i class="fa fa-fast-forward fa-fw"></i></span></li>');
else
node.push('<li><a href="javascript:;" ywl-jump-page="' + (_total_page - 1) + '"><span><i class="fa fa-fast-forward fa-fw"></i></span></a></li>');
}
$(_tbl_paging.selector + " nav ul").empty().append($(node.join('')));
// 事件绑定
$(_tbl_paging.selector + " [ywl-action='paging-prev']").click(_tbl_paging.paging_prev);
$(_tbl_paging.selector + " [ywl-action='paging-next']").click(_tbl_paging.paging_next);
$(_tbl_paging.selector + " [ywl-jump-page]").click(_tbl_paging.paging_jump);
_tbl_paging._update_per_page(cb_stack);
};
// 绑定三个页面跳转函数
_tbl_paging.paging_prev = function () {
_tbl_paging._table_ctrl.paging_prev();
};
_tbl_paging.paging_next = function () {
_tbl_paging._table_ctrl.paging_next();
};
_tbl_paging.paging_jump = function () {
var _page_index = parseInt($(this).attr('ywl-jump-page'));
_tbl_paging._table_ctrl.paging_jump(_page_index);
};
return _tbl_paging;
};
ywl.create_table_filter_host_group = function (tbl, selector, group_list, on_created) {
var _tblf_hg = {};
// 此过滤器绑定的DOM对象用于JQuery的选择器
_tblf_hg.selector = selector;
// 此过滤器绑定的表格控件
_tblf_hg._table_ctrl = tbl;
_tblf_hg._table_ctrl.append_filter_ctrl(_tblf_hg);
// 过滤器内容
_tblf_hg.filter_name = 'host_group';
_tblf_hg.filter_default = 0;
_tblf_hg.filter_value = 0;
_tblf_hg.group_list = group_list;
_tblf_hg.get_filter = function () {
var _ret = {};
_ret[_tblf_hg.filter_name] = _tblf_hg.filter_value;
return _ret;
//return [{k: self.filter_name, v: self.filter_value}];
};
_tblf_hg.reset = function (cb_stack, cb_args) {
if (_tblf_hg.filter_value == _tblf_hg.filter_default) {
cb_stack.exec();
return;
}
cb_stack
.add(function (cb_stack) {
_tblf_hg.filter_value = _tblf_hg.filter_default;
var g = get_host_group_by_id(_tblf_hg.filter_default);
$(_tblf_hg.selector + ' button span:first').html(g.group_name);
cb_stack.exec();
});
//ywl.assist.set_cookie(cb_stack, {k: _tblf_hg.filter_name, v: _tblf_hg.filter_default});
};
_tblf_hg.init = function (cb_stack, cb_args) {
var _all = {id: 0, group_name: '全部'};
var g = _all;
$(_tblf_hg.selector + ' button span:first').html(g.group_name);
_tblf_hg.filter_value = g.id;
var _groups = _tblf_hg.group_list;
var node = '';
node += '<li><a href="javascript:;" ywl-group-id="0">全部</a></li>';
node += '<li role="separator" class="divider"></li>';
$.each(_groups, function (i, g) {
node += '<li><a href="javascript:;" ywl-group-id="' + g.id + '">' + g.group_name + '</a></li>';
});
$(_tblf_hg.selector + ' ul').empty().append($(node));
// 点击事件绑定
$(_tblf_hg.selector + ' ul [ywl-group-id]').click(_tblf_hg._on_select);
if (_.isFunction(on_created)) {
on_created(_tblf_hg);
}
cb_stack.exec();
};
_tblf_hg._on_select = function () {
var gid = parseInt($(this).attr('ywl-group-id'));
var group_name = $(this).text();
//var _group = get_current_host_group();
//
//if (gid == _group.id)
// return;
//var g = get_host_group_by_id(gid);
var cb_stack = CALLBACK_STACK.create();
cb_stack
.add(_tblf_hg._table_ctrl.load_data)
.add(function (cb_stack) {
_tblf_hg.filter_value = gid;
$(_tblf_hg.selector + ' button span:first').html(group_name);
cb_stack.exec();
});
cb_stack.exec();
//ywl.assist.set_cookie(cb_stack, {k: _tblf_hg.filter_name, v: gid});
};
return _tblf_hg;
};
ywl.create_table_filter_system_type = function (tbl, selector, on_created) {
var _tblf_st = {};
// 此表格绑定的DOM对象的ID用于JQuery的选择器
_tblf_st.selector = selector;
// 此过滤器绑定的表格控件
_tblf_st._table_ctrl = tbl;
_tblf_st._table_ctrl.append_filter_ctrl(_tblf_st);
// 过滤器内容
_tblf_st.filter_name = 'host_sys_type';
_tblf_st.filter_default = 0;
_tblf_st.filter_value = 0;
_tblf_st.get_filter = function () {
var _ret = {};
_ret[_tblf_st.filter_name] = _tblf_st.filter_value;
return _ret;
//return [{k: self.filter_name, v: self.filter_value}];
};
_tblf_st.reset = function (cb_stack, cb_args) {
if (_tblf_st.filter_value == _tblf_st.filter_default) {
cb_stack.exec();
return;
}
cb_stack
.add(function (cb_stack) {
_tblf_st.filter_value = _tblf_st.filter_default;
var g = get_system_group_by_id(_tblf_st.filter_default);
$(_tblf_st.selector + ' button span:first').html(g.name);
cb_stack.exec();
});
//ywl.assist.set_cookie(cb_stack, {k: _tblf_st.filter_name, v: _tblf_st.filter_default});
};
_tblf_st.init = function (cb_stack) {
var node = '';
$.each(system_group, function (i, g) {
if (g.id == -1) {
node += '<li role="separator" class="divider"></li>';
return true;
}
var is_sub = g.is_sub || false;
if (is_sub)
node += '<li><a href="javascript:;" ywl-group-id="' + g.id + '"><i class="fa fa-angle-right fa-fw"></i> ' + g.name + '</a></li>';
else
node += '<li><a href="javascript:;" ywl-group-id="' + g.id + '">' + g.name + '</a></li>';
});
var g = get_current_system_group();
_tblf_st.filter_value = g.id;
$(_tblf_st.selector + ' button span:first').html(g.name);
$(_tblf_st.selector + ' ul').empty().append($(node));
// 点击事件绑定
$(_tblf_st.selector + ' ul [ywl-group-id]').click(_tblf_st._on_select);
if (_.isFunction(on_created)) {
on_created(_tblf_st);
}
cb_stack.exec();
};
_tblf_st._on_select = function () {
var gid = parseInt($(this).attr('ywl-group-id'));
//
//var _group = get_current_system_group();
//if (gid == _group.id)
// return;
var g = get_system_group_by_id(gid);
var cb_stack = CALLBACK_STACK.create();
cb_stack
.add(_tblf_st._table_ctrl.load_data)
.add(function (cb_stack) {
_tblf_st.filter_value = gid;
$(_tblf_st.selector + ' button span:first').html(g.name);
cb_stack.exec();
});
cb_stack.exec();
//ywl.assist.set_cookie(cb_stack, {k: _tblf_st.filter_name, v: gid});
};
return _tblf_st;
};
ywl.create_table_filter_search_box = function (tbl, selector, on_created) {
var _tblf_sb = {};
// 此过滤器绑定的DOM对象用于JQuery的选择器
_tblf_sb.selector = selector;
// 此过滤器绑定的表格控件
_tblf_sb._table_ctrl = tbl;
_tblf_sb._table_ctrl.append_filter_ctrl(_tblf_sb);
// 过滤器内容
_tblf_sb.filter_name = 'search';
_tblf_sb.filter_default = '';
_tblf_sb.get_filter = function () {
var _val = $(_tblf_sb.selector + " input").val();
var _ret = {};
_ret[_tblf_sb.filter_name] = _val;
return _ret;
//return [{k: self.filter_name, v: _val}];
};
_tblf_sb.reset = function (cb_stack, cb_args) {
var _val = $(_tblf_sb.selector + " input").val();
if (_val != _tblf_sb.filter_default) {
$(_tblf_sb.selector + " input").val(_tblf_sb.filter_default);
}
cb_stack.exec();
};
_tblf_sb.init = function (cb_stack, cb_args) {
// 绑定搜索按钮点击事件
$(_tblf_sb.selector + " button").click(function () {
_tblf_sb._table_ctrl.load_data(CALLBACK_STACK.create(), {});
});
// 绑定搜索输入框中按下回车键
$(_tblf_sb.selector + " input").keydown(function (event) {
if (event.which == 13) {
_tblf_sb._table_ctrl.load_data(CALLBACK_STACK.create(), {});
}
});
if (_.isFunction(on_created)) {
on_created(_tblf_sb);
}
cb_stack.exec();
};
return _tblf_sb;
};
ywl.create_table_filter_show_online = function (tbl, selector, on_created) {
var _tblf_so = {};
// 此过滤器绑定的DOM对象用于JQuery的选择器
_tblf_so.selector = selector;
// 此过滤器绑定的表格控件
_tblf_so._table_ctrl = tbl;
_tblf_so._table_ctrl.append_filter_ctrl(_tblf_so);
// 过滤器内容
_tblf_so.filter_name = 'show_online_host_only';
//self.filter_default = false;
_tblf_so.filter_value = false;
_tblf_so.get_filter = function () {
var _ret = {};
_ret[_tblf_so.filter_name] = _tblf_so.filter_value;
return _ret;
//return [{k: self.filter_name, v: self.filter_value}];
};
_tblf_so.reset = function (cb_stack, cb_args) {
// 注意,是否仅显示在线主机并不受“重置过滤器”按钮的影响,因此只需要传递调用栈即可
cb_stack.exec();
};
_tblf_so.init = function (cb_stack, cb_args) {
var _t = ywl.assist.get_cookie(_tblf_so.filter_name);
if (_t == null)
_tblf_so.filter_value = false;
else
_tblf_so.filter_value = _t;
_tblf_so._update_button();
$(_tblf_so.selector).click(function () {
_tblf_so.filter_value = !_tblf_so.filter_value;
var cb_stack = CALLBACK_STACK.create();
cb_stack
.add(_tblf_so._table_ctrl.load_data)
.add(function (cb_stack) {
_tblf_so._update_button();
cb_stack.exec();
});
//cb_stack.exec();
//ywl.assist.set_cookie(cb_stack, {k: _tblf_so.filter_name, v: _tblf_so.filter_value});
});
if (_.isFunction(on_created)) {
on_created(_tblf_so);
}
cb_stack.exec();
};
_tblf_so._update_button = function () {
if (_tblf_so.filter_value) {
$(_tblf_so.selector).html('<i class="fa fa-circle fa-fw"></i> 显示所有主机');
} else {
$(_tblf_so.selector).html('<i class="fa fa-dot-circle-o fa-fw"></i> 仅显示在线主机');
}
};
return _tblf_so;
};