PenetrationTestingScripts/antSword/source/modules/shellmanager/list/grid.js

101 lines
2.7 KiB
JavaScript

/**
* 数据表格模块
*/
const FileManager = require('../../filemanager/');
const LANG = antSword['language']['shellmanager']['list']['grid'];
const ContextMenu = require('./contextmenu');
class Grid {
/**
* 初始化函数
* @param {object} cell dhtmlx.cell对象
* @param {object} top 父层list对象
* @return {[type]} [description]
*/
constructor(cell, top) {
// 初始化grid
const grid = cell.attachGrid();
// 设置grid头
grid.setHeader(`
${LANG['url']},
${LANG['ip']},
${LANG['addr']},
${LANG['note']},
${LANG['ctime']},
${LANG['utime']}
`);
grid.setColTypes("ro,ro,ro,ro,ro,ro");
grid.setColSorting('str,str,str,str,str,str');
grid.setInitWidths("200,120,*,*,140,140");
grid.setColAlign("left,left,left,left,center,center");
grid.enableMultiselect(true);
// 根据设置隐藏相应的列
const dis_smhc = localStorage.hasOwnProperty('display_shellmanager_hiddencolumns') ? JSON.parse(localStorage.display_shellmanager_hiddencolumns):[];
dis_smhc.map((_)=>{grid.setColumnHidden(_,true)});
// 隐藏右键菜单
grid.attachEvent('onRowSelect', bmenu.hide);
$('.objbox')
.on('click', bmenu.hide)
.on('contextmenu', (e) => {
if (e.target.nodeName === 'DIV' && grid.callEvent instanceof Function) {
grid.callEvent('onRightClick', [grid.getSelectedRowId(), '', e]);
}
});
// 监听事件
grid.attachEvent('onRightClick', this._onRightClick);
grid.attachEvent('onRowDblClicked', this._onRowDblClicked);
grid.init();
return grid;
}
/**
* 右键事件
* @param {number} id 选择ID
* @param {number} lid 上一ID
* @param {object} event [description]
* @return {[type]} [description]
*/
_onRightClick(id, lid, event) {
// 解析出选中的数据信息
let ids = (this.getSelectedId() || '').split(',');
// 如果没有选中?则选中右键对应选项
if (ids.length === 1) {
this.selectRowById(id);
ids = [id];
}
// 获取选择数据信息
let infos = [];
if (ids.length >= 1) {
infos = antSword['ipcRenderer'].sendSync(
'shell-find',
{ _id: { $in: ids } }
)
}
// 获取选中的单条数据
let info = infos[0];
// 弹出右键菜单
new ContextMenu(
infos, event,
id, ids
);
return true;
}
/**
* 双击事件
* @param {[type]} id [description]
* @param {[type]} event [description]
* @return {[type]} [description]
*/
_onRowDblClicked(id, event) {
const info = antSword['ipcRenderer'].sendSync('shell-findOne', id);
new FileManager(info);
}
}
module.exports = Grid;