Namespace.register("U.CD.RT");
//注册右边个人项目栏js。把右边的树的js全部搬到这个地方。
///
U.CD.RT.Init = function () {
}
//-------------------------------------------------------------右边树目录的创建----------------------------------------------------------------
//当获取用户数据后装载用户的右边树节点。第一个参数是后台返回数据,第二个参数为当前选择的项目,如果没有这个参数,则默认显示第一个项目
U.CD.RT.LUDataAsyn = function (r) {
U.CD.LO.OpenZY();
//打开资源管理器
var _ld = r.context[0];
(_ld) && (_ld.parentNode.removeChild(_ld));
var i, _pnum = 0;
if (r.value == "" || r.value == "null") {
//添加改用户的基本信息,后台会判断是否为合法用户,用在后台传递认证的方式已经解决。
//U.ACD.Request(U.CD.AjaxUrl, ([type, userid, node.ID, node.Deep, Guid.newGuid(), input.value]), U.CD.RT.CP_OKAsyn, ([""]));
U.UI.Confirm("没取到该用户数据,确认重新获取!", [U.CD.U.LUData, ([US.userinfo])], "");
return;
}
//这个要注释。这是基本数据结构,他的合理性牵涉到前台所有代码的规范性。
//var _u = eval("(" + r.value + ")"); //由于r.value带了双引号,必须按照这种方式进行转换。比较奇特。
var _u = r.value;
//由于r.value带了双引号,必须按照这种方式进行转换。比较奇特。
U.CD.U.CUser = U.CD.U.AUsers[_u.UserID] = _u;
//集合加数组功能。//添加进用户集合中。同时赋予当前操作用户。
var L = _u.TNode[0].TNode;
//这要注释。TNode代表用户项目目录的标识。第一个TNode代表了根目录。第二个TNode代表了根目录的所有孩子节点。
//右边树目录区域,上面为资源管理器,下边为树目录。
var _mdiv = $("#UCD_RTree")[0];
_mdiv.innerHTML = "";
//清空以前用户数据。
//设置资源管理器样式
var _zygl = $$("div", {
"className": "UCD_RT_Root"
}, _mdiv);
//资源管理器
// var _gl = $$("div", { "className": "UCD_RT_Root_TJ" }, _zygl);
// for (i = 0; i < L.length; i++) { if (!L[i].IsDelete) _pnum++; } //统计项目个数
$$("div", {
"className": "UCD_RT_Root_TJ_NR",
"innerHTML": "资源管理器"
}, _zygl);
$$("div", {
"className": "UCD_TT_T_X",
"onclick": [[U.CD.LO.CloseZY]],
"style": {
"margin": "3px"
},
}, _zygl);
// var _zy = $$("div", { "className": "UCD_RT_Root_ZY" }, _zygl);
// $$("div", { "className": "UCD_RT_Root_Z", "innerHTML": "资源管理器" }, _zy);
//如果用户已经登录,才能有创建项目按钮
// if (U.CD.U.IsUSelf())
// $$("div", { "className": "UCD_RT_Root_C", "innerHTML": "创建项目", "onclick": [[U.CD.RT.CProject, ([_u.UserID, _u.TNode[0]])]] }, _zy); //创建项目按钮
//如果是查看其它人的资料,需要屏蔽树的操作菜单,屏蔽掉保存按钮,屏蔽掉用户登录。关闭示例项目
if (!U.CD.U.IsUSelf())
U.CD.Url.ForbUser();
///清理掉以前项目的所有数据。
//如果传递了项目id,则选中该项目,否则,选取第一个项目。 ///装载现有项目的数据。实现选中当前项目和当前文件的功能。
//因为有些节点被删除了,IsDelete=true。不能作为第一个节点。按道理数据库就不应该筛选出来,以后再搞!!!!
var _cp = r.context[1], _sel, _cso;
//定义当前选中的节点,
//此处需要清空数组,那么清空数组功能需要放在UC去实现。参考1473上面贴出的文章。
if (_cp) {
for (i = 0; i < L.length; i++) {
if (L[i].ID == _cp) {
_sel = L[i];
L = [];
L.push(_sel);
break;
}
}
} else {
for (i = 0; i < L.length; i++) {
if (!L[i].IsDelete) {
_sel = L[i];
break;
}
}
}
//创建树的总面板。
var TreeDiv = $$("div", {
"id": "UCD_RT_Tree"
}, _mdiv)
for (i = 0; i < L.length; i++) {
U.CD.RT.F_L_Node(L[i], _u.UserID, TreeDiv);
}
//遍历每个节点。 //生成右边树结构。
//指定当前项目和文件
if (!_sel)
return;
//如果找不到项目,则返回
_cso = TreeDiv.getElementsByTagName("div")["UCD_Tree" + _sel.ID];
//找到树节点。
if (_sel)
U.CD.RT.SM(_cso, _u.UserID, _sel);
//如果有子项目,展开第一个项目。
//选中第一个文件节点。也要循环判断是否删除了。晕,以后一定后台解决此问题。
var _ffile = null;
for (i = 0; i < _sel.TNode.length; i++) {
if (!_sel.TNode[i].IsDelete && _sel.TNode[i].Type == "file") {
_ffile = _sel.TNode[i];
break;
}
}
if (_ffile) {
_ffile.Content = unescape(_ffile.Content);
U.CD.R.LoadFC(_ffile);
}
if (_ffile && _ffile.Name)
document.title = _ffile.Name;
//设置网页标题
}
//不知道什么原因,有可能mongodb,mysql不稳定,有时候取不到数据,此函数刷新页面,重新获取数据
//U.CD.RT.LUDReload = function () { U.CD.Init(); }
//右边子元素
U.CD.RT.CLV = function (L, UDOD, UUID) {
var _UDFD = document.createDocumentFragment();
for (var i = 0; i < L.length; i++) {
U.CD.RT.F_L_Node(L[i], UUID, _UDFD);
//遍历每个节点。
}
UDOD.appendChild(_UDFD);
}
//每个节点的信息。,参数1为单个节点node,参数2为用户id,参数3为所有节点的文档碎片。
U.CD.RT.F_L_Node = function (node, UUID, _UDFD) {
var _UDIC, _UDTD, UDSD, _UDA;
if (node.IsDelete)
return;
//不列出已经删除的节点。
if (node.Deep == "2") {
_UDIC = "UCD_RT_ProIcon";
}//项目图标。
else {
_UDIC = "UCD_RT_FolderIcon";
}
//文件夹图标。
if (node.Type == "file") {
if (U.UP.IsImg(node.Name))
_UDIC = "UCD_RT_USTreeAlbumIcon";
else
_UDIC = "UCD_RT_FileIcon";
}
//文件图标
_UDTD = $$("div", {
"className": "UCD_RT_USTreecontainA",
"onclick": [[U.M.StopBubble], [U.CD.RT.DBC, ([node.ID])]]
}, _UDFD);
_UDSD = $$("div", {
"className": "UCD_RT_USTTitle",
"id": "UCD_Tree" + node.ID,
"onclick": [U.CD.RT.SM, (["retElement", UUID, node])]
}, _UDTD);
$$("div", {
"className": "UCD_RT_DiskGE UCD_RT_I_D_E UCD_RT_USTreesign"
}, _UDSD);
_UDA = $$("a", {
"className": "UCD_RT_USTreeusestudiodisktreeA",
"title": node.Name
}, _UDSD);
//if (U.CD.U.IsUSelf())
U.CD.RT.F_OP(_UDSD, UUID, node);
//如果用户已经登录、增加一个增删查改功能
$$("i", {
"className": "UCD_RT_Icon " + _UDIC
}, _UDA);
$$("span", {
"innerHTML": node.Name
}, _UDA);
}
//文件夹和文件操作面板
U.CD.RT.F_OP = function (_UDTD, userid, node) {
var _ZSCG = $$("div", {
"className": "UCD_RT_ZSCG"
}, _UDTD);
var _c;
if (node.Type == "folder") {
_c = $$("div", {
"className": "UCD_RT_ZSCG_T",
"title": "发布项目!",
"innerHTML": "✿",
"onclick": [[U.M.StopBubble], [U.CD.RT.Panel, (["retElement", userid, node])]]
}, _ZSCG);
//统一设置面板
} else
_c = $$("div", {
"className": "UCD_RT_ZSCG_T",
style: {
"margin-left": "-10px"
},
"title": "发布项目!",
"innerHTML": "✿",
"onclick": [[U.M.StopBubble], [U.CD.RT.Panel, (["retElement", userid, node])]]
}, _ZSCG);
//统一设置面板
}
//伸展树形目录。
U.CD.RT.SM = function (SO, UUID, node) {
if (node.Type == "folder") {
U.CD.U.CUser.CurrentSO = SO.parentNode;
U.CD.U.CUser.CurrentNode = node;
}
//记录当前单击文件夹节点
var _pre = U.CD.U.CUser.PreClickNode;
if (_pre)
_pre.style.backgroundcolor = "white";
//清除上次单击节点的样式。
if (node.Type == "file") {
node.Content = unescape(node.Content);
U.CD.R.LoadFC(node);
return;
}
//如果单击的是文件,打开文件。
var _UDOB = $("div", SO)[0];
//获取点击目录里的a标签 修改里的样式和获取id
var _L = $("div", SO.parentNode).length - 3;
//获取张开的孩子,增加一个功能就要修改这里,,要有统一处理方案。
var _CT = "UCD_RT_DiskGE UCD_RT_I_D_E UCD_RT_USTreesign";
//伸张的样式
if (_L > 1) {
SO.parentNode.removeChild(SO.parentNode.lastChild);
}//未伸展
else {
//伸展
//var _VA = U.CD.U.CUser.TNode.Select({ "ID": UDID })[0].TNode; //选取需要展示的数据。 U.Entity还需要继续改写。。。
var _VA = node.TNode;
//获取节点的子节点,选取需要展示的数据。 U.Entity还需要继续改写。。。
if (_VA != null) {
U.CD.RT.LV(_VA, SO.parentNode, UUID);
_CT = "UCD_RT_DiskGE UCD_RT_I_D_S UCD_RT_USTreesign";
}
//展开所有的子目录
}
_UDOB.className = _CT;
//伸缩的杨思
U.CD.RT.VM(SO, UUID, node);
//改变单击的样式
}
//这里是说明右边的树形栏视图
U.CD.RT.LV = function (L, UDD, UUID) {
var _UDOD = $$("div", {
"style": {
"marginLeft": "10px"
}
}, UDD);
U.CD.RT.CLV(L, _UDOD, UUID);
}
//单击菜单时的效果 伸缩时候的点击元素效果
U.CD.RT.VM = function (SO, userid, node) {
//if (US.Disk.diskfileTree[1][5]) { $(US.Disk.diskfileTree[1][5]); US.Disk.diskfileTree[1][5].style.border = "0"; US.Disk.diskfileTree[1][5].style.backgroundColor = ""; } //删除上次点击左边菜单变化的a标签
SO.style.backgroundColor = "rgb(234, 234, 234)";
//颜色变化
U.CD.U.CUser.PreClickNode = SO;
//把变化的对象放入 下次点击清理
//记录当前选中节点,以便新建文件时使用,其他地方也可以使用。此处需要找孩子节点才方便,否则,需要修改程序。
//if (node.Deep == 2) { U.CD.U.CUser.CurrentSO = SO.parentNode; U.CD.U.CUser.CurrentNode = node; }//为啥要深度等于2?
}
U.CD.RT.DBC = function () { }
//-----------------------------------------------------------新建一个项目,或者文件夹。---------------------------------------------------
//新建控制面板。
U.CD.RT.Panel = function (SO, userid, node) {
var _UDUP = $("#UCD_RT_FUP")[0]
, _UDUT = $("#UCD_RT_FUPCT")[0];
//获取命令窗口
var _NR = $("#UCD_RT_FUPCC")[0];
_NR.innerHTML = "";
//获取内容窗口
_UDUT.innerHTML = "当前目录:" + node.Name + "。";
//如果是文件夹或者项目则创建相应菜单,否则是文件,创建相应菜单。
if (node.Type == "folder") {
//暂时做到这样,以后再加图标,美化界面
$$("div", {
"className": "UCD_RT_Com",
"innerHTML": "新建子文件夹",
"onclick": [[U.M.StopBubble], [U.CD.RT.CP_CF, ([SO, userid, node])]]
}, _NR);
//新建文件夹
$$("div", {
"className": "UCD_RT_Com",
"innerHTML": "修改文件夹",
"onclick": [[U.M.StopBubble], [U.CD.RT.CP_M, ([SO, userid, node])]]
}, _NR);
//修改
$$("div", {
"className": "UCD_RT_Com",
"innerHTML": "删除文件夹",
"onclick": [[U.M.StopBubble], [U.CD.RT.CP_DF, ([SO, userid, node])]]
}, _NR);
//删除
$$("div", {
"className": "UCD_RT_Com",
"innerHTML": "新建文件",
"onclick": [[U.M.StopBubble], [U.CD.RT.CP_NF, ([SO, userid, node])]]
}, _NR);
//新建文件
var _up = $$("div", {
"className": "UCD_RT_Com UCD_RT_TreeIcon",
"innerHTML": "上传照片"
}, _NR);
//上传图片
$$("input", {
"id": "UCD_RT_Com_Up",
"name": "UCD_RT_Com_Up",
"type": "file",
"multiple": "true",
"accept": "image/gif,image/jpeg,image/png",
"onchange": [[U.CD.O.TreeUPFile, (["retElement"])]]
}, _up);
if (node.Deep == 2)
$$("div", {
"className": "UCD_RT_Com",
"innerHTML": "发布项目和作业",
"onclick": [[U.M.StopBubble], [U.CD.SL.Publish, ([SO, userid, node])]]
}, _NR);
//上传图片
} else {
$$("div", {
"className": "UCD_RT_Com",
"innerHTML": "修改文件名",
"onclick": [[U.M.StopBubble], [U.CD.RT.CP_M, ([SO, userid, node])]]
}, _NR);
//修改文件名
$$("div", {
"className": "UCD_RT_Com",
"innerHTML": "删除文件",
"onclick": [[U.M.StopBubble], [U.CD.RT.CP_DF, ([SO, userid, node])]]
}, _NR);
//删除文件
}
if (_UDUP.style.display == "none") {
U.D.PopupWindow(_UDUP);
}
//onclick直接响应
}
//创建一个项目,从根节点创建,SO代表根节点。userid用户id,node是节点信息
U.CD.RT.CProject = function (userid, node) {
//使用统一的创建对话框,减少代码量,传递不同的回调处理函数。js太智能。
U.CD.RT.NDialog("创建新项目", U.CD.RT.CP_OK, ([$("#UCD_RT_Tree")[0], userid, node, "Add_Folder"]));
}
//新建一个文件夹,从子节点创建
U.CD.RT.CP_CF = function (SO, userid, node) {
U.CD.RT.NDialog("新建文件夹", U.CD.RT.CP_OK, ([SO, userid, node, "Add_Folder"]));
}
//新建一个文件。
U.CD.RT.CP_NF = function (SO, userid, node) {
U.CD.RT.NDialog("新建文件,请自己添加扩展名!", U.CD.RT.CP_OK, ([SO, userid, node, "Add_File"]));
}
U.CD.RT.Display = function () {
$("#UCD_RT_FUP")[0].style.display = "none";
}
//新建项目或者文件夹或者修改公用弹出对话框函数。//参数1为Title,参数2为异步回调函数,参数3为异步函数参数数组。
U.CD.RT.NDialog = function (T, C, P) {
var _UFFD = $$("div", {
"className": "UCD_TR_CP"
});
//调用主项目对话框,并构建一个显示用的Div。
$$("div", {
"className": "UCD_TR_CP_T",
"innerHTML": "您操作的当前目录为:" + P[2].Name + ""
}, _UFFD);
//项目名称输入input
$$("div", {
"className": "UCD_TR_CP_MS",
"innerHTML": "请输入名称:"
}, _UFFD);
//项目名称输入input
var _p = $$("input", {
"className": "UCD_RT_CP_Input"
}, _UFFD);
P.push(_p);
//追加input为参数数组。居然后面函数参数的能自动拆分此数组?
//创建项目一定是在根元素下面。
var _CUM = new U.UI.Dialog(T, {
"width": "350px"
}, null, U.M.apply(_UFFD, [[C, P]]), _UFFD);
//js太智能了,可以自由拼凑参数!
U.D.PopupWindow(_CUM.Create());
}
//创建项目、文件夹、文件的函数,
//参数为SO 为触发事件的页面元素,用户id ,node为父亲节点,input为新节点的input,不能直接传值,type为类型,文件或者目录,
U.CD.RT.CP_OK = function (SO, userid, node, type, input, content) {
//节点基本信息,名字和id,id由前台生成。
var _fname = input.value, _fid = Guid.newGuid(), _nnode;
if (!U.CD.RT.VName(userid, _fname, type)) {
alert("名字不符合规范或者存在同名文件!");
return;
}
//前台添加一个节点,数组中也要添加节点。
if (type == "Add_File")
_nnode = {
"Name": _fname,
"CreateDate": new Date(),
"Type": "file",
"Content": "",
"ID": _fid,
"Deep": parseInt(node.Deep) + 1,
"IsPublic": true
};
else
_nnode = {
"Name": _fname,
"CreateDate": new Date(),
"Type": "folder",
"ID": _fid,
"Deep": parseInt(node.Deep) + 1,
"TNode": [],
"IsPublic": true
};
var L = [];
L.push(_nnode);
//追加一个节点,传递几个参数就追加几个。这种方式不科学,以后再改。因为硬盘是这样写的。
//如果不是根目录,或者className不是SO本身,需要找到添加子文件夹的父亲元素。
if (node.Deep > 1 && SO.className != "UCD_RT_USTreecontainA")
SO = SO.parentNode.parentNode.parentNode;
node.TNode.push(_nnode);
//同时向前台json中追加数据,没有json树真麻烦啊。。做json树操作是一定的。
if (node.Deep == "1")
U.CD.RT.CLV(L, $("#UCD_RT_Tree")[0], userid);
//根节点添加孩子节点,不会有margin右移操作
//向前台追加树结点。//如果连续追加多个,会多出很多margin:10px父亲节点,会出问题。
else if (SO.childNodes.length == 2) {
U.CD.RT.CLV(L, SO.lastChild, userid);
;
} else {
U.CD.RT.LV(L, SO, userid);
}
//记录当前选中节点,以便新建文件时使用,其他地方也可以使用。此处需要找孩子节点才方便,否则,需要修改程序。
if (_nnode.Deep == 2) {
U.CD.U.CUser.CurrentSO = SO.lastChild;
U.CD.U.CUser.CurrentNode = _nnode;
}
//后台添加一个节点。传递了用户id,根元素id,根元素深度,新节点guid,新节点名字。
U.ACD.Request(U.CD.AjaxUrl, ([type, userid, node.ID, node.Deep, _nnode.ID, _nnode.Name]), U.CD.RT.CP_OKAsyn, ([""]));
}
//添加项目异步。是否添加成功或者失败,异步回调函数
U.CD.RT.CP_OKAsyn = function (r) {
if (r.value == "false" || r.value == "") {
alert("添加失败,点此反馈信息");
return;
}
//var _node = eval("(" + r.value + ")"); //如果是文件添加成功,则刷新代码页面。
var _node = r.value;
//如果是文件添加成功,则刷新代码页面。
//如果是文件夹,则把焦点至于当前文件夹
//更新树节点。否则树和节点不同步。
if (_node.Type == "file") {
U.CD.R.LoadFC(_node);
//刷新代码和视图,选项卡,换行窗口。
}
alert("添加成功");
}
//--------------------------------------------------------------------删除功能确认----------------------------------------------------
U.CD.RT.CP_DF = function (SO, userid, node) {
//L = L.Select({ "ID": id })[0]; //查找到指定节点。//从数据库删除,通过id如何查找其父亲节点?这是一个问题,U.E.Entity应该能够解决此问题。
U.UI.Confirm("你确定删除 " + node.Name + "分组吗?", [U.CD.RT.CP_D, ([SO, userid, node])], "");
var len = document.getElementsByClassName('UD_SYF_S UD_SYKO').length;
var len_t = document.getElementsByClassName('UD_SYF_ST').length;
var len_th = document.getElementsByClassName('UD_SYF_SS UD_SYI').length;
var len_f = document.getElementsByClassName('U_UI_OBY').length;
/*for(var izus = 0;izus