Subversion Repositories Applications.papyrus

Rev

Rev 1371 | Details | Compare with Previous | 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.io.common");
12
dojo.require("dojo.string");
13
dojo.require("dojo.lang.extras");
14
dojo.io.transports = [];
15
dojo.io.hdlrFuncNames = ["load", "error", "timeout"];
16
dojo.io.Request = function (url, mimetype, transport, changeUrl) {
17
	if ((arguments.length == 1) && (arguments[0].constructor == Object)) {
18
		this.fromKwArgs(arguments[0]);
19
	} else {
20
		this.url = url;
21
		if (mimetype) {
22
			this.mimetype = mimetype;
23
		}
24
		if (transport) {
25
			this.transport = transport;
26
		}
27
		if (arguments.length >= 4) {
28
			this.changeUrl = changeUrl;
29
		}
30
	}
31
};
32
dojo.lang.extend(dojo.io.Request, {url:"", mimetype:"text/plain", method:"GET", content:undefined, transport:undefined, changeUrl:undefined, formNode:undefined, sync:false, bindSuccess:false, useCache:false, preventCache:false, load:function (type, data, transportImplementation, kwArgs) {
33
}, error:function (type, error, transportImplementation, kwArgs) {
34
}, timeout:function (type, empty, transportImplementation, kwArgs) {
35
}, handle:function (type, data, transportImplementation, kwArgs) {
36
}, timeoutSeconds:0, abort:function () {
37
}, fromKwArgs:function (kwArgs) {
38
	if (kwArgs["url"]) {
39
		kwArgs.url = kwArgs.url.toString();
40
	}
41
	if (kwArgs["formNode"]) {
42
		kwArgs.formNode = dojo.byId(kwArgs.formNode);
43
	}
44
	if (!kwArgs["method"] && kwArgs["formNode"] && kwArgs["formNode"].method) {
45
		kwArgs.method = kwArgs["formNode"].method;
46
	}
47
	if (!kwArgs["handle"] && kwArgs["handler"]) {
48
		kwArgs.handle = kwArgs.handler;
49
	}
50
	if (!kwArgs["load"] && kwArgs["loaded"]) {
51
		kwArgs.load = kwArgs.loaded;
52
	}
53
	if (!kwArgs["changeUrl"] && kwArgs["changeURL"]) {
54
		kwArgs.changeUrl = kwArgs.changeURL;
55
	}
56
	kwArgs.encoding = dojo.lang.firstValued(kwArgs["encoding"], djConfig["bindEncoding"], "");
57
	kwArgs.sendTransport = dojo.lang.firstValued(kwArgs["sendTransport"], djConfig["ioSendTransport"], false);
58
	var isFunction = dojo.lang.isFunction;
59
	for (var x = 0; x < dojo.io.hdlrFuncNames.length; x++) {
60
		var fn = dojo.io.hdlrFuncNames[x];
61
		if (kwArgs[fn] && isFunction(kwArgs[fn])) {
62
			continue;
63
		}
64
		if (kwArgs["handle"] && isFunction(kwArgs["handle"])) {
65
			kwArgs[fn] = kwArgs.handle;
66
		}
67
	}
68
	dojo.lang.mixin(this, kwArgs);
69
}});
70
dojo.io.Error = function (msg, type, num) {
71
	this.message = msg;
72
	this.type = type || "unknown";
73
	this.number = num || 0;
74
};
75
dojo.io.transports.addTransport = function (name) {
76
	this.push(name);
77
	this[name] = dojo.io[name];
78
};
79
dojo.io.bind = function (request) {
80
	if (!(request instanceof dojo.io.Request)) {
81
		try {
82
			request = new dojo.io.Request(request);
83
		}
84
		catch (e) {
85
			dojo.debug(e);
86
		}
87
	}
88
	var tsName = "";
89
	if (request["transport"]) {
90
		tsName = request["transport"];
91
		if (!this[tsName]) {
92
			dojo.io.sendBindError(request, "No dojo.io.bind() transport with name '" + request["transport"] + "'.");
93
			return request;
94
		}
95
		if (!this[tsName].canHandle(request)) {
96
			dojo.io.sendBindError(request, "dojo.io.bind() transport with name '" + request["transport"] + "' cannot handle this type of request.");
97
			return request;
98
		}
99
	} else {
100
		for (var x = 0; x < dojo.io.transports.length; x++) {
101
			var tmp = dojo.io.transports[x];
102
			if ((this[tmp]) && (this[tmp].canHandle(request))) {
103
				tsName = tmp;
104
				break;
105
			}
106
		}
107
		if (tsName == "") {
108
			dojo.io.sendBindError(request, "None of the loaded transports for dojo.io.bind()" + " can handle the request.");
109
			return request;
110
		}
111
	}
112
	this[tsName].bind(request);
113
	request.bindSuccess = true;
114
	return request;
115
};
116
dojo.io.sendBindError = function (request, message) {
117
	if ((typeof request.error == "function" || typeof request.handle == "function") && (typeof setTimeout == "function" || typeof setTimeout == "object")) {
118
		var errorObject = new dojo.io.Error(message);
119
		setTimeout(function () {
120
			request[(typeof request.error == "function") ? "error" : "handle"]("error", errorObject, null, request);
121
		}, 50);
122
	} else {
123
		dojo.raise(message);
124
	}
125
};
126
dojo.io.queueBind = function (request) {
127
	if (!(request instanceof dojo.io.Request)) {
128
		try {
129
			request = new dojo.io.Request(request);
130
		}
131
		catch (e) {
132
			dojo.debug(e);
133
		}
134
	}
135
	var oldLoad = request.load;
136
	request.load = function () {
137
		dojo.io._queueBindInFlight = false;
138
		var ret = oldLoad.apply(this, arguments);
139
		dojo.io._dispatchNextQueueBind();
140
		return ret;
141
	};
142
	var oldErr = request.error;
143
	request.error = function () {
144
		dojo.io._queueBindInFlight = false;
145
		var ret = oldErr.apply(this, arguments);
146
		dojo.io._dispatchNextQueueBind();
147
		return ret;
148
	};
149
	dojo.io._bindQueue.push(request);
150
	dojo.io._dispatchNextQueueBind();
151
	return request;
152
};
153
dojo.io._dispatchNextQueueBind = function () {
154
	if (!dojo.io._queueBindInFlight) {
155
		dojo.io._queueBindInFlight = true;
156
		if (dojo.io._bindQueue.length > 0) {
157
			dojo.io.bind(dojo.io._bindQueue.shift());
158
		} else {
159
			dojo.io._queueBindInFlight = false;
160
		}
161
	}
162
};
163
dojo.io._bindQueue = [];
164
dojo.io._queueBindInFlight = false;
165
dojo.io.argsFromMap = function (map, encoding, last) {
166
	var enc = /utf/i.test(encoding || "") ? encodeURIComponent : dojo.string.encodeAscii;
167
	var mapped = [];
168
	var control = new Object();
169
	for (var name in map) {
170
		var domap = function (elt) {
171
			var val = enc(name) + "=" + enc(elt);
172
			mapped[(last == name) ? "push" : "unshift"](val);
173
		};
174
		if (!control[name]) {
175
			var value = map[name];
176
			if (dojo.lang.isArray(value)) {
177
				dojo.lang.forEach(value, domap);
178
			} else {
179
				domap(value);
180
			}
181
		}
182
	}
183
	return mapped.join("&");
184
};
185
dojo.io.setIFrameSrc = function (iframe, src, replace) {
186
	try {
187
		var r = dojo.render.html;
188
		if (!replace) {
189
			if (r.safari) {
190
				iframe.location = src;
191
			} else {
192
				frames[iframe.name].location = src;
193
			}
194
		} else {
195
			var idoc;
196
			if (r.ie) {
197
				idoc = iframe.contentWindow.document;
198
			} else {
199
				if (r.safari) {
200
					idoc = iframe.document;
201
				} else {
202
					idoc = iframe.contentWindow;
203
				}
204
			}
205
			if (!idoc) {
206
				iframe.location = src;
207
				return;
208
			} else {
209
				idoc.location.replace(src);
210
			}
211
		}
212
	}
213
	catch (e) {
214
		dojo.debug(e);
215
		dojo.debug("setIFrameSrc: " + e);
216
	}
217
};
218