Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1318 alexandre_ 1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
10
 
11
dojo.provide("dojo.widget.TreeLoadingController");
12
dojo.require("dojo.widget.TreeBasicController");
13
dojo.require("dojo.event.*");
14
dojo.require("dojo.json");
15
dojo.require("dojo.io.*");
16
dojo.widget.defineWidget("dojo.widget.TreeLoadingController", dojo.widget.TreeBasicController, {RPCUrl:"", RPCActionParam:"action", RPCErrorHandler:function (type, obj, evt) {
17
	alert("RPC Error: " + (obj.message || "no message"));
18
}, preventCache:true, getRPCUrl:function (action) {
19
	if (this.RPCUrl == "local") {
20
		var dir = document.location.href.substr(0, document.location.href.lastIndexOf("/"));
21
		var localUrl = dir + "/" + action;
22
		return localUrl;
23
	}
24
	if (!this.RPCUrl) {
25
		dojo.raise("Empty RPCUrl: can't load");
26
	}
27
	return this.RPCUrl + (this.RPCUrl.indexOf("?") > -1 ? "&" : "?") + this.RPCActionParam + "=" + action;
28
}, loadProcessResponse:function (node, result, callObj, callFunc) {
29
	if (!dojo.lang.isUndefined(result.error)) {
30
		this.RPCErrorHandler("server", result.error);
31
		return false;
32
	}
33
	var newChildren = result;
34
	if (!dojo.lang.isArray(newChildren)) {
35
		dojo.raise("loadProcessResponse: Not array loaded: " + newChildren);
36
	}
37
	for (var i = 0; i < newChildren.length; i++) {
38
		newChildren[i] = dojo.widget.createWidget(node.widgetType, newChildren[i]);
39
		node.addChild(newChildren[i]);
40
	}
41
	node.state = node.loadStates.LOADED;
42
	if (dojo.lang.isFunction(callFunc)) {
43
		callFunc.apply(dojo.lang.isUndefined(callObj) ? this : callObj, [node, newChildren]);
44
	}
45
}, getInfo:function (obj) {
46
	return obj.getInfo();
47
}, runRPC:function (kw) {
48
	var _this = this;
49
	var handle = function (type, data, evt) {
50
		if (kw.lock) {
51
			dojo.lang.forEach(kw.lock, function (t) {
52
				t.unlock();
53
			});
54
		}
55
		if (type == "load") {
56
			kw.load.call(this, data);
57
		} else {
58
			this.RPCErrorHandler(type, data, evt);
59
		}
60
	};
61
	if (kw.lock) {
62
		dojo.lang.forEach(kw.lock, function (t) {
63
			t.lock();
64
		});
65
	}
66
	dojo.io.bind({url:kw.url, handle:dojo.lang.hitch(this, handle), mimetype:"text/json", preventCache:_this.preventCache, sync:kw.sync, content:{data:dojo.json.serialize(kw.params)}});
67
}, loadRemote:function (node, sync, callObj, callFunc) {
68
	var _this = this;
69
	var params = {node:this.getInfo(node), tree:this.getInfo(node.tree)};
70
	this.runRPC({url:this.getRPCUrl("getChildren"), load:function (result) {
71
		_this.loadProcessResponse(node, result, callObj, callFunc);
72
	}, sync:sync, lock:[node], params:params});
73
}, expand:function (node, sync, callObj, callFunc) {
74
	if (node.state == node.loadStates.UNCHECKED && node.isFolder) {
75
		this.loadRemote(node, sync, this, function (node, newChildren) {
76
			this.expand(node, sync, callObj, callFunc);
77
		});
78
		return;
79
	}
80
	dojo.widget.TreeBasicController.prototype.expand.apply(this, arguments);
81
}, doMove:function (child, newParent, index) {
82
	if (newParent.isTreeNode && newParent.state == newParent.loadStates.UNCHECKED) {
83
		this.loadRemote(newParent, true);
84
	}
85
	return dojo.widget.TreeBasicController.prototype.doMove.apply(this, arguments);
86
}, doCreateChild:function (parent, index, data, callObj, callFunc) {
87
	if (parent.state == parent.loadStates.UNCHECKED) {
88
		this.loadRemote(parent, true);
89
	}
90
	return dojo.widget.TreeBasicController.prototype.doCreateChild.apply(this, arguments);
91
}});
92