118 lines
2.6 KiB
JavaScript
118 lines
2.6 KiB
JavaScript
//
|
|
// 左侧目录 模块
|
|
//
|
|
|
|
const LANG_T = antSword['language']['toastr'];
|
|
const LANG = antSword['language']['filemanager']['folder'];
|
|
|
|
class Folder {
|
|
|
|
// 需要参数
|
|
// 1.cell: 左侧layout.cell对象
|
|
constructor(cell, manager) {
|
|
cell.setWidth(250);
|
|
// 创建tree
|
|
let tree = cell.attachTree();
|
|
// tree事件
|
|
tree.attachEvent('onClick', (id) => {
|
|
manager.files.gotoPath(id);
|
|
});
|
|
|
|
this.tree = tree;
|
|
this.cell = cell;
|
|
this.cache = {};
|
|
this.manager = manager;
|
|
this.setTitle(0);
|
|
|
|
}
|
|
|
|
parse(files) {
|
|
|
|
let self = this;
|
|
// 解析测试
|
|
let path = this.manager.path.replace(/\/$/, '');
|
|
// 解析盘符
|
|
this.manager.devices.map((_) => {
|
|
self.cache[_] = {};
|
|
self.tree.deleteItem(_);
|
|
});
|
|
// 1. 分解当前路径
|
|
let curPath = '';
|
|
path.split('/').map((p) => {
|
|
curPath += `${p}/`;
|
|
// 添加到缓存
|
|
self.cache[curPath] = 0;
|
|
});
|
|
// 2. 解析当前子目录
|
|
let folderNum = 0;
|
|
files.map((f) => {
|
|
let _ = f['name'];
|
|
if (!_.endsWith('/') || ['./', '../'].indexOf(_) !== -1) {return};
|
|
self.cache[`${curPath}${_}`] = 0;
|
|
folderNum ++;
|
|
});
|
|
// 设置标题
|
|
this.setTitle(folderNum);
|
|
|
|
// 3. 解析缓存为树形菜单虚拟对象
|
|
// /var/www/html 根据/分割为数组,循环,相加,增加到虚拟缓存
|
|
let vscache = {};
|
|
let parseObj = (o, p) => {
|
|
let start = p.substr(0, p.indexOf('/')) + '/';
|
|
let end = p.substr(start.length);
|
|
|
|
o[start] = o[start] || {};
|
|
if (end.length > 0) {
|
|
parseObj(o[start], end);
|
|
}
|
|
}
|
|
for (let c in self.cache) {
|
|
parseObj(vscache, c);
|
|
}
|
|
|
|
|
|
// 解析为树形菜单数据
|
|
let parseItem = (obj, path) => {
|
|
let _arr = [];
|
|
for (let _ in obj) {
|
|
let _path = path + _;
|
|
let _obj = {
|
|
id: antSword.noxss(_path),
|
|
text: antSword.noxss((_.length === 1 || (_.endsWith(':/') && _.length === 3)) ? _ : _.replace(/\/$/, ''))
|
|
};
|
|
let _result = parseItem(obj[_], _path);
|
|
if (_result) {
|
|
_obj['item'] = _result;
|
|
};
|
|
if (_path === self.manager.path) {
|
|
_obj['open'] = 1;
|
|
_obj['select'] = 1;
|
|
};
|
|
_arr.push(_obj);
|
|
}
|
|
return _arr;
|
|
}
|
|
|
|
let items = parseItem(vscache, '');
|
|
|
|
this.tree.parse({
|
|
id: 0,
|
|
item: items
|
|
}, 'json');
|
|
|
|
this.cell.progressOff();
|
|
}
|
|
|
|
/**
|
|
* 设置标题
|
|
* @param {Number} num 当前目录数
|
|
*/
|
|
setTitle(num) {
|
|
this.cell.setText(`<i class="fa fa-folder-o"></i> ${LANG['title']} (${num})`);
|
|
}
|
|
|
|
}
|
|
|
|
// export default Folder;
|
|
module.exports = Folder;
|