define(function(require, exports) {
var pathOperate = require('./pathOperate');
var pathOpen = require('./pathOpen');
var successCallback;
var isUpdateRefresh = false;//上传连续更新树目录队列方式。没有处理完不做反应,处理完后sleep 2s;
ui.pathOpen = pathOpen;
// 目录树操作
var init=function(){
$.ajax({
url: Config.treeAjaxURL+"&type=init",
dataType:'json',
error:function(){
$('#folderList').html('
'+LNG.system_error+'
');
},
success:function(data){
if (!data.code){
$('#folderList').html(''+LNG.system_error+'
');
return;
}
var tree_json = data.data;
$.fn.zTree.init($("#folderList"), setting,tree_json);
}
});
$('.ztree .switch').die('mouseenter').live('mouseenter',function(){
$(this).addClass('switch_hover');
}).die('mouseleave').live('mouseleave',function(){
$(this).removeClass('switch_hover');
});
if (Config.pageApp == 'editor') {
Mousetrap.bind('up',function(e) {
keyAction(e,'up');
}).bind('down',function(e) {
keyAction(e,'down');
}).bind('left',function(e) {
keyAction(e,'left');
}).bind('right',function(e) {
keyAction(e,'right');
});
Mousetrap.bind('enter',function(e) {
tree.open();
}).bind(['del','command+backspace'],function(e) {
tree.remove();
}).bind('f2',function(e) {
stopPP(e);
tree.rname();
}).bind(['ctrl+f','command+f'],function(e) {
stopPP(e);
tree.search();
}).bind(['ctrl+c','command+c'],function(e) {
tree.copy();
}).bind(['ctrl+x','command+x'],function(e) {
tree.cute();
}).bind(['ctrl+v','command+v'],function(e) {
tree.past();
}).bind('alt+m',function(e) {
tree.create('folder');
}).bind('alt+n',function(e) {
tree.create('file');
});
};
};
var keyAction = function(e,action){
stopPP(e);
var zTree = $.fn.zTree.getZTreeObj("folderList"),
treeNode = zTree.getSelectedNodes()[0];
if (treeNode != undefined) {
switch(action){
case 'up':
var node = treeNode.getPreNode();
if (!node) {
node = treeNode.getParentNode();
}else if(node.open && node.children.length>0) {
while(node.open && node.children && node.children.length>=1){
node = node.children[node.children.length-1];
}
//if (node.getParentNode().tId == treeNode.tId) node=treeNode;
}
zTree.selectNode(node);
break;
case 'down':
if (treeNode.open && treeNode.children.length>=1){
node = treeNode.children[0];
}else{
var tempNode = treeNode,
node = tempNode.getNextNode()||tempNode.getParentNode().getNextNode();
try{
while(!node){
tempNode = tempNode.getParentNode();
node = tempNode.getNextNode()||tempNode.getParentNode().getNextNode();
}
}catch(e){}
}
zTree.selectNode(node);
break;
case 'left':
if (!treeNode.isParent) {
zTree.selectNode(treeNode.getParentNode());
}else{
if (treeNode.open) {
zTree.expandNode(treeNode,false);
}else{
zTree.selectNode(treeNode.getParentNode());
}
}
break;
case 'right':
if (treeNode.open){
zTree.selectNode(treeNode.children[0]);
}else{
zTree.expandNode(treeNode,true);
}
break;
default:break;
}
}
};
var setting={
async: {
enable: true,
url:Config.treeAjaxURL,//直接上次拿到的json变量。
autoParam:["ajax_name=name","ajax_path=path","this_path"],//前面是value 后面是key
dataFilter: function(treeId, parentNode, responseData){
if (!responseData.code){
return null;
}
return responseData.data;
}
},
edit: {
enable: true,
showRemoveBtn: false,
showRenameBtn: false,
drag:{
isCopy:false,//暂时屏蔽拖拽方式移动
isMove:false
// isCopy:true,
// isMove:true,
// prev:false,
// inner:true,
// next:false
}
},
view: {
showLine: false,
selectedMulti: false,
dblClickExpand: false,
// dblClickExpand: function(treeId, treeNode) {
// return treeNode.level >= 0;
// },// 双击 展开&折叠
addDiyDom: function(treeId, treeNode) {
var spaceWidth = Global.treeSpaceWide;
var switchObj = $("#" + treeNode.tId + "_switch"),
icoObj = $("#" + treeNode.tId + "_ico");
switchObj.remove();
icoObj.before(switchObj);
if(treeNode.type=='file'){//如果是文件则用自定义图标
icoObj.removeClass('button ico_docu')
.addClass('file '+treeNode.ext)
}
if(treeNode.ext=='oexe'){//如果是文件则用自定义图标
icoObj.removeClass('button ico_docu')
.addClass('file oexe')
.removeAttr('style');;
}
if (treeNode.level >= 1) {
var spaceStr = "";
switchObj.before(spaceStr);
}
//配置对应右键菜单
var selector = '';
if (Config.pageApp == 'explorer') {
if (treeNode.ext == '__fav__') selector ='menuTreeFav';
if (treeNode.ext == '__root__') selector ='menuTreeRoot';
if (treeNode.type == 'folder') selector ='menuTreeFolder';
}else if (Config.pageApp == 'editor'){//对应收藏夹 文件&文件夹
if (treeNode.ext == '__fav__') selector ='menuTreeFav';
if (treeNode.ext == '__root__') selector ='menuTreeRoot';
if (treeNode.type == 'file') selector ='menuTreeFile';
if (treeNode.type == 'folder') selector ='menuTreeFolder';
if (treeNode.ext == 'oexe') selector ='menuApp';
}
var title = LNG.name+':'+treeNode.name+"\n"+LNG.size+':'+treeNode.size_friendly+"\n"
+LNG.modify_time+':'+treeNode.mtime;
if (treeNode.type != 'file') {
title = treeNode.name;
}
switchObj.parent().addClass(selector).attr('title',title);
}
},
callback: {//事件处理回调函数
onClick: function(event,treeId,treeNode){
var zTree = $.fn.zTree.getZTreeObj("folderList");
zTree.selectNode(treeNode);
zTree.expandNode(treeNode);
if(treeNode.type=='folder' && Config.pageApp=='editor') return;
if (treeNode.level == 0) {
if (Config.pageApp=='explorer' && treeNode.ext != '__fav__'){
ui.path.list(treeNode.this_path+'/');//更新文件列表
}
return false;
}
if (Config.pageApp=='editor'){
ui.tree.openEditor();//编辑器优先打开文件
}else if(Config.pageApp=='explorer'){
ui.tree.open();
}
},
beforeRightClick:function(treeId, treeNode){
var zTree = $.fn.zTree.getZTreeObj("folderList");
zTree.selectNode(treeNode);
},
beforeAsync:function(treeId, treeNode){
treeNode.ajax_name= urlEncode(treeNode.name);
treeNode.ajax_path= urlEncode(treeNode.path);
},
onAsyncSuccess:function(treeId, treeNode){//更新成功后调用
if (typeof(successCallback) == 'function'){
successCallback();
successCallback = undefined;
}
},
//新建文件夹、文件、重命名后回调(input blur时调用)
onRename:function(event, treeId,treeNode){
var zTree = $.fn.zTree.getZTreeObj("folderList"),
parent = treeNode.getParentNode();;
//已存在检测
if(zTree.getNodesByParam('name',treeNode.name,parent).length>1){
core.tips.tips(LNG.name_isexists,false);
zTree.removeNode(treeNode);
return;
}
if (treeNode.create){//新建
var path = treeNode.path+'/'+treeNode.name;
if (treeNode.type=='folder') {
pathOperate.newFolder(path,function(data){
if (!data.code) return;
refresh(parent);
successCallback = function(){
var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0];
zTree.selectNode(sel);
f5_refresh();
}
});
}else{//新建文件
pathOperate.newFile(path,function(data){
if (!data.code) return;
refresh(parent);
successCallback = function(){
var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0];
zTree.selectNode(sel);
f5_refresh();
}
});
}
}else{//重命名
var from = treeNode.path + treeNode.beforeName;
var to = treeNode.path + treeNode.name;
pathOperate.rname(from,to,function(data){
if (!data.code) return;
refresh(parent);
successCallback = function(){
var sel = zTree.getNodesByParam('name',treeNode.name,parent)[0];
zTree.selectNode(sel);
f5_refresh();
}
});
}
}
// beforeDrag: function(treeId, treeNodes){
// for (var i=0,l=treeNodes.length; i=1) return;
var p=_param();
if (p.type == 'oexe'){
p.path = p.node;
}
pathOpen.open(p.path,p.type);
},
fav:function(){pathOperate.fav(_param().path);},
search:function(){core.search('',_param().path);},
appEdit:function(){
var p=_param();
var data = p.node;data.path = p.path;
pathOperate.appEdit(data,function(){
refresh(p.node.getParentNode());
});},
//operate
info:function(){pathOperate.info(_param(true));},
copy:function(){pathOperate.copy(_param(true));},
cute:function(){pathOperate.cute(_param(true));},
past:function(){
var param = _param();
if (!param.node.isParent) param.node = param.node.getParentNode();
pathOperate.past(param.path,function(){
f5_refresh();
refresh(param.node);
});
},
remove:function(){
var param = _param(true);
var parent = param[0].node.getParentNode();
if(!parent) {
$.dialog({fixed: true,resize: false,icon:'warning',drag: true,
title:LNG.tips,content: LNG.remove_not,ok:true});
}else{
pathOperate.remove(param,function(){
f5_refresh();
refresh(parent);
});
}
},
checkIfChange:function(explorer_path){
if (isUpdateRefresh) return;
isUpdateRefresh = true;
var zTree = $.fn.zTree.getZTreeObj("folderList");
if (!zTree) return;
zTree.getNodesByFilter(function(treeNode){
var path;
if (treeNode.this_path){
path = treeNode.this_path;
}else if (treeNode.path != ''){
path = treeNode.path+treeNode.name;
}
if (path == explorer_path ||
path+'/'==explorer_path) {
refresh(treeNode);
return true;
}
return false;
},true);
setTimeout(function(){
isUpdateRefresh = false;
},1000);
},
explorer:function(){//管理文档
var path = _param().path;
if (!path) path = G.this_path;
core.explorer(path);
},
fileBox:function(type){//管理文档
if (type = 'save_file') {};//没有则自动创建
if (type = 'save_folder') {};
if (type = 'select_') {};
$('.header-left').css('width',110)
.next().css('left',150);
$('.frame-left').width("width",142)
$.dialog.open('?/explorer&plague='+type,{
resize:true,
fixed:true,
title:'另存为',
width:750,height:420
});
},
// 创建节点 让元素进入编辑状态(编辑、新建)。保存动作在ztree的onRename回调函数中
create:function(type){//type ='file' 'folder'
var zTree = $.fn.zTree.getZTreeObj("folderList");
var sel = zTree.getSelectedNodes();
if (sel.length<=0){//工具栏新建文件(夹)
var node = zTree.getNodeByParam("ext",'__root__', null);
zTree.selectNode(node);
}
var param = _param(),
treeNode = param.node,
parent = treeNode.getParentNode(),
file="newfile",i=0,
folder=LNG.newfolder;
if (type=='folder') {
while(zTree.getNodesByParam('name',folder+'('+i+')',parent).length>0){
i++;
}
newNode = {name:folder+'('+i+')','ext':'',type:'folder',create:true,path:param.path};
}else if(type=='file'){
while(zTree.getNodesByParam('name',file+'('+i+').txt',parent).length>0){
i++;
}
newNode = {name:file+'('+i+').txt','ext':'txt',type:'file',create:true,path:param.path};
}
if(treeNode.children != undefined){
treeNodeNew = zTree.addNodes(treeNode,newNode);
zTree.editName(treeNodeNew[0]);
}else{
if (treeNode.type != 'folder') treeNode = treeNode.getParentNode();
successCallback = function(){
treeNodeNew = zTree.addNodes(treeNode,newNode);
zTree.editName(treeNodeNew[0]);
}
refresh(treeNode);
}
},
rname:function(){
var zTree = $.fn.zTree.getZTreeObj("folderList"),
treeNode = zTree.getSelectedNodes()[0],newNode;
zTree.editName(treeNode);
treeNode.beforeName = treeNode.name;
}
}
});