web/js/privileges.js (787 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var currentOver = ''; var saveMoveNode = 0; var moveitem; var nomove = 0; var dragnode = {hoverid: 0, dragid: 0, startX: 0, startY: 0}; var mouseontree = 0; var dragging = 0; var nodedropdata = 0; function moveData() { this.oldparentid = ''; this.oldparentobj = ''; this.oldparentset = 0; this.newparentid = ''; this.newparentobj = ''; this.newparentset = 0; this.moveid = ''; this.moveobj = ''; this.moveset = 0; } function generalPrivCB(data, ioArgs) { eval(data); unsetLoading2(); } function setLoading2(duration) { dijit.byId('workingDialog').duration = duration; document.body.style.cursor = 'wait'; if(dijit.byId('workingDialog')) { var obj = dijit.byId('workingDialog'); obj.show(); } } function unsetLoading2() { document.body.style.cursor = 'default'; if(dijit.byId('workingDialog')) dijit.byId('workingDialog').hide(); } function nodeSelect(node) { /* for some reason, _onLabelFocus does not get set up for tree nodes by * Safari; so, we perform the same operations here */ if(dojo.isSafari) { node.tree._onNodeFocus(node); } var nodeid = node.item.name; if(nodeid != parseInt(nodeid)) return; var nodename = node.item.display; var tree = dijit.byId('privtree'); tree.lastFocused = node; updateNodeLabels(nodename); setLoading2(250); dojo.cookie('VCLACTIVENODE', nodeid, {expires: 365, path: '/', domain: cookiedomain}); var obj = dojo.byId('nodecont'); var data = {continuation: obj.value, node: nodeid}; RPCwrapper(data, generalPrivCB, 0); } function mouseDown(evt) { dragging = 1; dragnode.dragid = dragnode.hoverid; dragnode.startX = mouseX; dragnode.startY = mouseY; } function mouseRelease(evt) { if(typeof nodedropdata == 'number') return; if(dragging == 0) return; dragging = 0; if(mouseX == dragnode.startX && mouseY == dragnode.startY) return; if(nodedropdata[dragnode.dragid] == 0 || nodedropdata[dragnode.hoverid] == 0 || mouseontree == 0) setSelected(dijit.byId('privtree').lastFocused.item.name[0]); } function initDropData() { if(dijit.byId('addNodeBtn')) dijit.byId('addNodeBtn').set('disabled', false); dojo.addClass('ddloading', 'hidden'); } function updateNodeLabels(nodename) { dojo.byId('addPaneNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>'; dojo.byId('addGroupPaneNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>'; dojo.byId('addResourceGroupPaneNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>'; dojo.byId('addChildNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>'; dojo.byId('deleteNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>'; dojo.byId('renameNodeName').innerHTML = 'Node: <strong>' + nodename + '</strong>'; dijit.byId('newNodeName').set('value', nodename); } function isChildFocused(focusid, nodes) { for(var i in nodes) { if(nodes[i].name == focusid) return 1; else if(nodes[i].children) if(isChildFocused(focusid, nodes[i].children)) return 1; } return 0; } function showPrivPane(name) { dijit.byId(name).show(); } function focusFirstNode(id) { var tree = dijit.byId('privtree'); if(tree._itemNodesMap && tree._itemNodesMap[id]) { refreshNodeDropData(); setSelected(id); updateNodeLabels(tree._itemNodesMap[id][0].label); tree.lastFocused = tree._itemNodesMap[id][0]; } else if(tree._itemNodesMap && tree.model.root.children && tree._itemNodesMap[tree.model.root.children[0].name[0]]) { var pnodeids = new Array(); var node = tree.model.store._itemsByIdentity[id]; while(node._RRM) { for(var pid in node._RRM) { pnodeids.push(pid); node = tree.model.store._itemsByIdentity[pid]; } } var pid; while(pid = pnodeids.pop()) { var pnode = tree._itemNodesMap[pid][0]; tree._expandNode(pnode); } setTimeout(function() {focusFirstNode(id);}, 10); } else { setTimeout(function() {focusFirstNode(id);}, 500); } } function submitAddChildNode() { dojo.byId('addChildNodeStatus').innerHTML = ''; var obj = dojo.byId('childNodeName'); var newnode = obj.value; if(! newnode.length) return; var contid = dojo.byId('addchildcont').value; var tree = dijit.byId('privtree'); var data = {continuation: contid, newnode: newnode, activeNode: tree.lastFocused.item.name[0]}; setLoading2(150); RPCwrapper(data, generalPrivCB, 0); } function addChildNode(name, id, parentid) { var tree = dijit.byId('privtree'); var store = tree.model.store; // determine selected node var parentnode = tree.lastFocused.item; // add new node to selected node var nodedata = {name: id, display: name, parent: parentid}; var parentdata = {parent: parentnode, attribute: 'children'}; var newnode = store.newItem(nodedata, parentdata); var parentitem = tree._itemNodesMap[parentid][0].item; positionNode(newnode, parentitem); // hide addNodePane dojo.byId('childNodeName').value = ''; dojo.byId('addChildNodeStatus').innerHTML = ''; setTimeout(function() {dijit.byId('addNodePane').hide();}, 100); nodedropdata[id] = 1; } function positionNode(node, parent) { var index = 0; var decr = 0; for(var i = 0; i < parent.children.length; i++) { if(node.display[0].localeCompare(parent.children[i].display[0]) == 0) decr = 1; if(node.display[0].localeCompare(parent.children[i].display[0]) == -1) break; } index = i; if(decr) index--; nomove = 1; nodemodel.pasteItem(node, parent, parent, 0, index); nomove = 0; } function deleteNodes() { var tree = dijit.byId('privtree'); var contid = dojo.byId('delchildcont').value; var data = {continuation: contid, activeNode: tree.lastFocused.item.name[0]}; RPCwrapper(data, generalPrivCB, 0); } function setSelectedPrivNode(nodeid) { var tree = dijit.byId('privtree'); var store = tree.model.store; setSelected(nodeid); tree.lastFocused = tree._itemNodesMap[nodeid][0]; updateNodeLabels(tree.lastFocused.label); setLoading2(250); dojo.cookie('VCLACTIVENODE', nodeid, {expires: 365, path: '/', domain: cookiedomain}); var obj = dojo.byId('nodecont'); var nodeid = tree.lastFocused.item.name; var data = {continuation: obj.value, node: nodeid}; RPCwrapper(data, generalPrivCB, 0); } function removeNodesFromTree(idlist, deleteid) { var tree = dijit.byId('privtree'); var ids = idlist.split(','); for(var i in ids) { if(typeof(moveitem) !== 'undefined' && ids[i] == moveitem.oldparentid) { moveitem = undefined; dijit.byId('revertMoveNodeBtn').set('disabled', true); } } tree.model.store.fetchItemByIdentity({ identity: deleteid, onItem: removeNodesFromTreeCB }); } function removeNodesFromTreeCB(item, request) { if(item) { var tree = dijit.byId('privtree'); nomove = 1; tree.model.store.deleteItem(item); nomove = 0; } } function renameNode() { var tree = dijit.byId('privtree'); var contid = dojo.byId('renamecont').value; dijit.byId('submitRenameNodeBtn').focus(); var newname = dijit.byId('newNodeName').value; var curname = tree.lastFocused.item.display[0]; if(! newname.length) return; if(newname == curname) { dijit.byId('newNodeName').focus(); dojo.byId('renameNodeStatus').innerHTML = 'You must enter a different name'; return; } var data = {continuation: contid, newname: newname, activeNode: tree.lastFocused.item.name[0]}; RPCwrapper(data, renameNodeCB, 1); } function renameNodeCB(data, ioArgs) { if(data.items.error) { if(data.items.error == 1) { alert(data.items.message); clearRenameBox(); return; } else if(data.items.error == 2) { dojo.byId('renameNodeStatus').innerHTML = data.items.message; return; } } var newname = data.items.newname; var nodeid = data.items.node; var tree = dijit.byId('privtree'); tree.model.store.fetchItemByIdentity({ identity: nodeid, onItem: function(item, request) { var tree = dijit.byId('privtree'); var store = tree.model.store; nomove = 1; store.setValue(item, 'display', newname); nomove = 0; setTimeout(function() { var parentitem = tree._itemNodesMap[item.parent[0]][0].item; positionNode(item, parentitem); }, 500); } }); clearRenameBox(); updateNodeLabels(newname); } function clearRenameBox() { dojo.byId('newNodeName').value = ''; dojo.byId('renameNodeStatus').innerHTML = ''; dijit.byId('renameDialog').hide(); } function refreshPerms() { setLoading2(250); var tree = dijit.byId('privtree'); var cont = dojo.byId('nodecont').value; var data = {continuation: cont, node: tree.lastFocused.item.name[0]}; RPCwrapper(data, generalPrivCB, 0); } function privChange(checked, row, col, type) { var objname = 'ck' + row + ':' + col; var obj = dijit.byId(objname); if(obj.disabled) return; var nameArr = obj.name.split('['); nameArr = nameArr[1].split(']'); nameArr = nameArr[0].split(':'); if(! checked && obj.value == 'single') obj.value = ''; if(! checked && obj.value == 'cascadesingle') obj.value = 'cascade'; else if(checked && obj.value == '') obj.value = 'single'; else if(checked && obj.value == 'cascade') obj.value = 'cascadesingle'; if(type == 1) var contid = dojo.byId('changeuserprivcont').value; else if(type == 2) var contid = dojo.byId('changeusergroupprivcont').value; else if(type == 3) var contid = dojo.byId('changeresourceprivcont').value; var tree = dijit.byId('privtree'); var data = {continuation: contid, activeNode: tree.lastFocused.item.name[0], item: nameArr[0], priv: nameArr[1], value: checked}; setLoading2(50); RPCwrapper(data, generalPrivCB, 0); } function nodeCheck(checked, row, col, type) { var objname = "cell" + row + ":" + col; if(dojo.hasClass(objname, 'privCascade')) { objname = "ck" + row + ":" + col; var obj = dijit.byId(objname); obj.setAttribute('checked', true); } else { privChange(checked, row, col, type); } } function changeCascadedRights(checked, row, count, fromclick, type) { var i; var objname; var value; var obj; var obj2; for(i = 1; i < count; i++) { objname = "ck" + row + ":" + i; obj = dijit.byId(objname); if(! obj) continue; value = obj.value; if(checked) { if(value != 'single') { objname = "cell" + row + ":" + i; obj2 = dojo.byId(objname); if(! obj2) continue; dojo.removeClass(objname, 'privCascade'); if(value == 'cascade') { objname = "ck" + row + ":" + i; obj = dijit.byId(objname) obj.setAttribute('checked', false); } } } else { if(value == 'single') obj.setAttribute('checked', true); else if(value == 'cascadesingle' || value == 'cascade') { obj.setAttribute('checked', true); objname = "cell" + row + ":" + i; obj2 = dojo.byId(objname); if(! obj2) continue; dojo.addClass(objname, 'privCascade'); } } } if(fromclick) privChange(checked, row, 'block', type); } function addUserPaneHide() { dijit.byId('addUserPane').hide(); var workingobj = dijit.byId('workingDialog'); dojo.connect(workingobj._fadeOut, 'onEnd', dijit.byId('addUserPane'), 'hide'); dojo.byId('addUserPrivStatus').innerHTML = ''; dojo.byId('newuser').value = ''; var obj = dijit.byId('blockchk'); if(obj.checked) obj.setAttribute('checked', false); for(var i = 0; obj = dijit.byId('userck0:' + i); i++) { if(obj.checked) obj.setAttribute('checked', false); } } function submitAddUser() { dojo.byId('addUserPrivStatus').innerHTML = ''; var userid = dojo.byId('newuser').value; if(! userid.length) return; var perms = new Array(); var obj = dijit.byId('blockchk'); if(obj.checked) perms.push('block'); for(var i = 0; obj = dijit.byId('userck0:' + i); i++) { if(obj.checked) perms.push(obj.name); } var perms2 = perms.join(':', perms); var contid = dojo.byId('addusercont').value; var tree = dijit.byId('privtree'); var data = {continuation: contid, perms: perms2, newuser: userid, activeNode: tree.lastFocused.item.name[0]}; setLoading2(250); RPCwrapper(data, generalPrivCB, 0); } function addUserGroupPaneHide() { dijit.byId('addUserGroupPane').hide(); var workingobj = dijit.byId('workingDialog'); dojo.connect(workingobj._fadeOut, 'onEnd', dijit.byId('addUserGroupPane'), 'hide'); dojo.byId('addUserGroupPrivStatus').innerHTML = ''; dojo.byId('newgroupid').value = ''; var obj = dijit.byId('blockgrpchk'); if(obj.checked) obj.setAttribute('checked', false); for(var i = 0; obj = dijit.byId('usergrpck0:' + i); i++) { if(obj.checked) obj.setAttribute('checked', false); } } function submitAddUserGroup() { dojo.byId('addUserGroupPrivStatus').innerHTML = ''; var groupid = dojo.byId('newgroupid').value; if(! groupid.length) return; var perms = new Array(); var obj = dijit.byId('blockgrpchk'); if(obj.checked) perms.push('block'); obj = dijit.byId('usergrpck0:0'); if(obj.checked) perms.push('cascade'); for(var i = 1; obj = dijit.byId('usergrpck0:' + i); i++) { if(obj.checked) perms.push(obj.name); } var perms2 = perms.join(':', perms); var contid = dojo.byId('addusergroupcont').value; var tree = dijit.byId('privtree'); var data = {continuation: contid, perms: perms2, newgroupid: groupid, activeNode: tree.lastFocused.item.name[0]}; setLoading2(250); RPCwrapper(data, generalPrivCB, 0); } function addResourceGroupPaneHide() { dijit.byId('addResourceGroupPane').hide(); var workingobj = dijit.byId('workingDialog'); dojo.connect(workingobj._fadeOut, 'onEnd', dijit.byId('addResourceGroupPane'), 'hide'); dojo.byId('addResourceGroupPrivStatus').innerHTML = ''; dojo.byId('newresourcegroupid').value = ''; var obj = dijit.byId('blockresgrpck'); if(obj.checked) obj.setAttribute('checked', false); for(var i = 0; obj = dijit.byId('resgrpck0:' + i); i++) { if(obj.checked) obj.setAttribute('checked', false); } } function submitAddResourceGroup() { dojo.byId('addResourceGroupPrivStatus').innerHTML = ''; var groupid = dojo.byId('newresourcegroupid').value; if(! groupid.length) return; var perms = new Array(); var obj = dijit.byId('blockresgrpck'); if(obj.checked) perms.push('block'); obj = dijit.byId('resgrpck0:0'); if(obj.checked) perms.push('cascade'); for(var i = 1; obj = dijit.byId('resgrpck0:' + i); i++) { if(obj.checked) perms.push(obj.name); } var perms2 = perms.join(':', perms); var contid = dojo.byId('addresourcegroupcont').value; var tree = dijit.byId('privtree'); var data = {continuation: contid, perms: perms2, newgroupid: groupid, activeNode: tree.lastFocused.item.name[0]}; setLoading2(250); RPCwrapper(data, generalPrivCB, 0); } function getGroupMembers(resid, domid, cont) { currentOver = domid; dojo.byId(domid).onmouseover = ''; var contid = dojo.byId(cont).value; var data = {continuation: contid, groupid: resid, domid: domid}; RPCwrapper(data, groupMembersCB, 1); } function getGroupMembersCancel(domid) { currentOver = ''; dojo.byId(domid).onmouseout = ''; } function groupMembersCB(data, ioArgs) { var members = data.items.members; var domid = data.items.domid; var tt = new dijit.Tooltip({ connectId: [domid], label: members }); if(currentOver == domid) tt.open(dojo.byId(domid)); } function selectUserGroup(cont) { var data = {continuation: cont, groupid: dojo.byId('editusergroupid').value}; RPCwrapper(data, selectUserGroupCB, 1); } function selectUserGroupCB(data, ioArgs) { if(data.items.failed) { alert('You are not authorized to manage this group'); return; } dojo.removeClass('usergroupprivs', 'groupprivshidden'); dijit.byId('usergroupcopyprivsbtn').setAttribute('disabled', false); dijit.byId('usergroupsaveprivsbtn').setAttribute('disabled', false); var items = dojo.query('#usergroupprivs input[type=checkbox]'); for(var i = 0; i < items.length; i++) { dijit.byId(items[i].id).setAttribute('checked', false); } for(var i = 0; i < data.items.perms.length; i++) { obj = dijit.byId('grouptype' + data.items.perms[i]); obj.setAttribute('checked', true); } } function showUserGroupPrivHelp(help, id) { dojo.byId('groupprivhelp').innerHTML = help; dojo.addClass('grouptypespan' + id, 'hlperm'); } function clearUserGroupPrivHelp(id) { dojo.byId('groupprivhelp').innerHTML = ''; dojo.removeClass('grouptypespan' + id, 'hlperm'); } function copyUserGroupPrivs(cont) { var data = {continuation: cont, groupid: dojo.byId('copyusergroupid').value}; RPCwrapper(data, copyUserGroupPrivsCB, 1); } function copyUserGroupPrivsCB(data, ioArgs) { if(data.items.failed) { alert('You are not authorized to manage this group'); return; } var items = dojo.query('#usergroupprivs input[type=checkbox]'); for(var i = 0; i < items.length; i++) { dijit.byId(items[i].id).setAttribute('checked', false); } for(var i = 0; i < data.items.perms.length; i++) { obj = dijit.byId('grouptype' + data.items.perms[i]); obj.setAttribute('checked', true); } } function saveUserGroupPrivs(cont) { var permids = new Array(); var items = dojo.query('#usergroupprivs input[type=checkbox]:checked'); for(var i = 0; i < items.length; i++) { permids.push(items[i].name); } var permids2 = permids.join(','); var data = {continuation: cont, permids: permids2, groupid: dojo.byId('editusergroupid').value}; RPCwrapper(data, saveUserGroupPrivsCB, 1); } function saveUserGroupPrivsCB(data, ioArgs) { if(data.items.failed) { dojo.byId('userpermsubmitstatus').innerHTML = "Failed to save permissions: " + data.items.failed; dojo.addClass('userpermsubmitstatus', 'statusfailed'); } else if(data.items.success) { dojo.byId('userpermsubmitstatus').innerHTML = "Permissions successfully saved"; dojo.addClass('userpermsubmitstatus', 'statussuccess'); } setTimeout(clearUserPrivStatus, 10000); } function clearUserPrivStatus() { dojo.byId('userpermsubmitstatus').innerHTML = ""; dojo.removeClass('userpermsubmitstatus', 'statussuccess'); dojo.removeClass('userpermsubmitstatus', 'statusfailed'); } function hideUserGroupPrivs() { dojo.addClass('usergroupprivs', 'groupprivshidden'); dijit.byId('usergroupcopyprivsbtn').setAttribute('disabled', true); dijit.byId('usergroupsaveprivsbtn').setAttribute('disabled', true); } function moveNode(node) { if(nomove) return; if(saveMoveNode == 0) { saveMoveNode = node.name[0]; return; } var node1 = saveMoveNode; var node2 = node.name[0]; if(node1 == node2) { var tree = dijit.byId('privtree'); var nodeitem = tree._itemNodesMap[dragnode.dragid][0].item; var parentid = nodeitem.parent[0]; var parentitem = tree._itemNodesMap[parentid][0].item; positionNode(nodeitem, parentitem); if(nodeitem != tree.lastFocused.item) setSelected(tree.lastFocused.item.name[0]); saveMoveNode = 0; return; } var tree = dijit.byId('privtree'); var moveid = dragnode.dragid; var oldparentid = tree._itemNodesMap[dragnode.dragid][0].item.parent[0]; if(oldparentid == node1) var newparentid = node2; else var newparentid = node1; var nodeitem = tree._itemNodesMap[moveid][0].item; var parentitem = tree._itemNodesMap[newparentid][0].item; positionNode(nodeitem, parentitem); var movename = nodeitem.display[0]; for(var i = 0; i < parentitem.children.length; i++) { var child = parentitem.children[i]; if(movename == child.display[0] && newparentid == child.parent[0]) { var oldparentitem = tree._itemNodesMap[oldparentid][0].item; nomove = 1; nodemodel.pasteItem(nodeitem, parentitem, oldparentitem, 0, 0); positionNode(nodeitem, oldparentitem); nomove = 0; alert('Another node with the same name and parent as the node being moved already exists.'); saveMoveNode = 0; return; } } var data = {continuation: dojo.byId('movenodecont').value, moveid: moveid, oldparentid: oldparentid, newparentid: newparentid} RPCwrapper(data, moveNodeCB, 1); saveMoveNode = 0; } function moveNodeCB(data, ioArgs) { moveitem = new moveData(); moveitem.moveid = data.items.moveid; moveitem.oldparentid = data.items.oldparentid; moveitem.newparentid = data.items.newparentid; if(data.items.status == 'invalidreload') { alert('Error: invalid data submitted'); window.location.reload(); return; } else if(data.items.status == 'invaliddata') { alert('Error: invalid data submitted'); revertNodeMove(); return; } else if(data.items.status == 'noaccess') { alert('You do not have access to move the selected nodes to the selected location.'); revertNodeMove(); return; } else if(data.items.status == 'collision') { alert('Another node with the same name and parent as the node being moved already exists.'); revertNodeMove(); return; } else if(data.items.status == 'nochange') { return; } dojo.byId('revertmovenodecont').value = data.items.revertcont; dojo.byId('moveNodeName').innerHTML = data.items.movename; dojo.byId('moveNodeOldParentName').innerHTML = data.items.oldparent; dojo.byId('moveNodeNewParentName').innerHTML = data.items.newparent; dojo.byId('movenodesubmitcont').value = data.items.continuation; dijit.byId('moveDialog').show(); } function submitMoveNode() { var data = {continuation: dojo.byId('movenodesubmitcont').value}; RPCwrapper(data, submitMoveNodeCB, 1); } function submitMoveNodeCB(data, ioArgs) { dijit.byId('moveDialog').hide(); dijit.byId('revertMoveNodeBtn').set('disabled', false); nodestore.fetchItemByIdentity({ identity: moveitem.moveid, onItem: function(item, request) { nomove = 1; dijit.byId('privtree').model.store.setValue(item, 'parent', data.items.newparentid); nomove = 0; var selnode = dijit.byId('privtree').selectedNode; if(selnode.item == item) { nodeSelect(selnode); } } }); refreshNodeDropData(); } function submitRevertMoveNode() { var data = {continuation: dojo.byId('revertmovenodecont').value}; RPCwrapper(data, submitRevertMoveNodeCB, 1); } function submitRevertMoveNodeCB(data, ioArgs) { revertNodeMove(); dijit.byId('revertMoveNodeDlg').hide(); dijit.byId('revertMoveNodeBtn').set('disabled', true); moveitem = undefined; refreshNodeDropData(); } function revertNodeMove() { nodestore.fetchItemByIdentity({ identity: moveitem.moveid, onItem: function(item, request) { revertNodeMoveCB('movenode', item); } }); nodestore.fetchItemByIdentity({ identity: moveitem.oldparentid, onItem: function(item, request) { revertNodeMoveCB('oldparent', item); } }); nodestore.fetchItemByIdentity({ identity: moveitem.newparentid, onItem: function(item, request) { revertNodeMoveCB('newparent', item); } }); } function revertNodeMoveCB(type, item) { if(type == 'movenode') { moveitem.moveobj = item; moveitem.moveset = 1; } else if(type == 'oldparent') { moveitem.oldparentobj = item; moveitem.oldparentset = 1; } else if(type == 'newparent') { moveitem.newparentobj = item; moveitem.newparentset = 1; } if(moveitem.oldparentset == 1 && moveitem.newparentset == 1 && moveitem.moveset == 1) { var index = -1; if('children' in moveitem.oldparentobj) { for(var i = 0; i < moveitem.oldparentobj.children.length; i++) { if(moveitem.moveobj.display[0].localeCompare(moveitem.oldparentobj.children[i].display[0]) == -1) { break; } } } index = i; nomove = 1; nodemodel.pasteItem(moveitem.moveobj, moveitem.newparentobj, moveitem.oldparentobj, 0, index); dijit.byId('privtree').model.store.setValue(moveitem.moveobj, 'parent', moveitem.oldparentobj.name[0]); nodeSelect(dijit.byId('privtree')._itemNodesMap[moveitem.moveobj.name[0]][0]); nomove = 0; } } function setSelected(nodeid) { var tree = dijit.byId('privtree'); var selpath = []; while(typeof(tree._itemNodesMap[nodeid]) !== 'undefined') { selpath.unshift(tree._itemNodesMap[nodeid][0].item); nodeid = tree._itemNodesMap[nodeid][0].item.parent[0]; } selpath.unshift(tree.model.root); tree.attr('path', selpath); } function checkCanMove(tree, domnodes) { if(typeof nodedropdata == 'number') return false; var node = dijit.getEnclosingWidget(domnodes[0]); var nodeid = node.item.name[0]; if(nodedropdata[nodeid] == 0) return false; return true; } function checkNodeDrop(domnode, tree, position) { if(typeof nodedropdata == 'number') return false; var node = dijit.getEnclosingWidget(domnode); var nodeid = node.item.name[0]; if(nodedropdata[nodeid] == 0) return false; return true; } function refreshNodeDropData() { var data = {continuation: dojo.byId('refreshnodedropdatacont').value}; RPCwrapper(data, generalPrivCB, 0, 60000); }