171 lines
4.1 KiB
JavaScript
171 lines
4.1 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2006, The Dojo Foundation
|
|
All Rights Reserved.
|
|
|
|
Licensed under the Academic Free License version 2.1 or above OR the
|
|
modified BSD license. For more information on Dojo licensing, see:
|
|
|
|
http://dojotoolkit.org/community/licensing.shtml
|
|
*/
|
|
|
|
|
|
dojo.provide("dojo.widget.TreeRPCController");
|
|
|
|
dojo.require("dojo.event.*");
|
|
dojo.require("dojo.json")
|
|
dojo.require("dojo.io.*");
|
|
dojo.require("dojo.widget.TreeLoadingController");
|
|
|
|
dojo.widget.tags.addParseTreeHandler("dojo:TreeRPCController");
|
|
|
|
dojo.widget.TreeRPCController = function(){
|
|
dojo.widget.TreeLoadingController.call(this);
|
|
}
|
|
|
|
dojo.inherits(dojo.widget.TreeRPCController, dojo.widget.TreeLoadingController);
|
|
|
|
dojo.lang.extend(dojo.widget.TreeRPCController, {
|
|
widgetType: "TreeRPCController",
|
|
|
|
/**
|
|
* Make request to server about moving children.
|
|
*
|
|
* Request returns "true" if move succeeded,
|
|
* object with error field if failed
|
|
*
|
|
* I can't leave DragObject floating until async request returns, need to return false/true
|
|
* so making it sync way...
|
|
*
|
|
* Also, "loading" icon is not shown until function finishes execution, so no indication for remote request.
|
|
*/
|
|
doMove: function(child, newParent, index){
|
|
|
|
//if (newParent.isTreeNode) newParent.markLoading();
|
|
|
|
var params = {
|
|
// where from
|
|
child: this.getInfo(child),
|
|
childTree: this.getInfo(child.tree),
|
|
// where to
|
|
newParent: this.getInfo(newParent),
|
|
newParentTree: this.getInfo(newParent.tree),
|
|
newIndex: index
|
|
};
|
|
|
|
var success;
|
|
|
|
this.runRPC({
|
|
url: this.getRPCUrl('move'),
|
|
/* I hitch to get this.loadOkHandler */
|
|
load: function(response){
|
|
success = this.doMoveProcessResponse(response, child, newParent, index) ;
|
|
},
|
|
sync: true,
|
|
lock: [child, newParent],
|
|
params: params
|
|
});
|
|
|
|
|
|
return success;
|
|
},
|
|
|
|
doMoveProcessResponse: function(response, child, newParent, index){
|
|
|
|
if(!dojo.lang.isUndefined(response.error)){
|
|
this.RPCErrorHandler("server", response.error);
|
|
return false;
|
|
}
|
|
|
|
var args = [child, newParent, index];
|
|
return dojo.widget.TreeLoadingController.prototype.doMove.apply(this, args);
|
|
|
|
},
|
|
|
|
|
|
doRemoveNode: function(node, callObj, callFunc){
|
|
|
|
var params = {
|
|
node: this.getInfo(node),
|
|
tree: this.getInfo(node.tree)
|
|
}
|
|
|
|
this.runRPC({
|
|
url: this.getRPCUrl('removeNode'),
|
|
/* I hitch to get this.loadOkHandler */
|
|
load: function(response){
|
|
this.doRemoveNodeProcessResponse(response, node, callObj, callFunc)
|
|
},
|
|
params: params,
|
|
lock: [node]
|
|
});
|
|
|
|
},
|
|
|
|
|
|
doRemoveNodeProcessResponse: function(response, node, callObj, callFunc){
|
|
if(!dojo.lang.isUndefined(response.error)){
|
|
this.RPCErrorHandler("server", response.error);
|
|
return false;
|
|
}
|
|
|
|
if(!response){ return false; }
|
|
|
|
if(response == true){
|
|
/* change parent succeeded */
|
|
var args = [ node, callObj, callFunc ];
|
|
dojo.widget.TreeLoadingController.prototype.doRemoveNode.apply(this, args);
|
|
|
|
return;
|
|
}else if(dojo.lang.isObject(response)){
|
|
dojo.raise(response.error);
|
|
}else{
|
|
dojo.raise("Invalid response "+response)
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// Create node stuff
|
|
// -----------------------------------------------------------------------------
|
|
|
|
|
|
doCreateChild: function(parent, index, output, callObj, callFunc){
|
|
|
|
var params = {
|
|
tree: this.getInfo(parent.tree),
|
|
parent: this.getInfo(parent),
|
|
index: index,
|
|
data: output
|
|
}
|
|
|
|
this.runRPC({
|
|
url: this.getRPCUrl('createChild'),
|
|
load: function(response) {
|
|
// suggested data is dead, fresh data from server is used
|
|
this.doCreateChildProcessResponse( response, parent, index, callObj, callFunc)
|
|
},
|
|
params: params,
|
|
lock: [parent]
|
|
});
|
|
|
|
},
|
|
|
|
doCreateChildProcessResponse: function(response, parent, index, callObj, callFunc){
|
|
|
|
if(!dojo.lang.isUndefined(response.error)){
|
|
this.RPCErrorHandler("server",response.error);
|
|
return false;
|
|
}
|
|
|
|
if(!dojo.lang.isObject(response)){
|
|
dojo.raise("Invalid result "+response)
|
|
}
|
|
|
|
var args = [parent, index, response, callObj, callFunc];
|
|
|
|
dojo.widget.TreeLoadingController.prototype.doCreateChild.apply(this, args);
|
|
}
|
|
});
|