Subversion Repositories Applications.papyrus

Rev

Rev 1318 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1318 Rev 1422
1
/*
1
/*
2
	Copyright (c) 2004-2006, The Dojo Foundation
2
	Copyright (c) 2004-2006, The Dojo Foundation
3
	All Rights Reserved.
3
	All Rights Reserved.
4
 
4
 
5
	Licensed under the Academic Free License version 2.1 or above OR the
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:
6
	modified BSD license. For more information on Dojo licensing, see:
7
 
7
 
8
		http://dojotoolkit.org/community/licensing.shtml
8
		http://dojotoolkit.org/community/licensing.shtml
9
*/
9
*/
-
 
10
 
-
 
11
 
10
 
12
 
11
dojo.provide("dojo.io.XhrIframeProxy");
13
dojo.provide("dojo.io.XhrIframeProxy");
12
dojo.require("dojo.experimental");
14
dojo.require("dojo.experimental");
13
dojo.experimental("dojo.io.XhrIframeProxy");
15
dojo.experimental("dojo.io.XhrIframeProxy");
14
dojo.require("dojo.io.IframeIO");
16
dojo.require("dojo.io.IframeIO");
15
dojo.require("dojo.dom");
17
dojo.require("dojo.dom");
16
dojo.require("dojo.uri.Uri");
18
dojo.require("dojo.uri.Uri");
17
dojo.io.XhrIframeProxy = {xipClientUrl:djConfig["xipClientUrl"] || dojo.uri.moduleUri("dojo.io", "xip_client.html"), _state:{}, _stateIdCounter:0, needFrameRecursion:function () {
19
dojo.io.XhrIframeProxy = {xipClientUrl:djConfig["xipClientUrl"] || dojo.uri.moduleUri("dojo.io", "xip_client.html"), _state:{}, _stateIdCounter:0, needFrameRecursion:function () {
18
	return (true == dojo.render.html.ie70);
20
	return (true == dojo.render.html.ie70);
19
}, send:function (facade) {
21
}, send:function (facade) {
20
	var stateId = "XhrIframeProxy" + (this._stateIdCounter++);
22
	var stateId = "XhrIframeProxy" + (this._stateIdCounter++);
21
	facade._stateId = stateId;
23
	facade._stateId = stateId;
22
	var frameUrl = this.xipClientUrl + "#0:init:id=" + stateId + "&server=" + encodeURIComponent(facade._ifpServerUrl) + "&fr=false";
24
	var frameUrl = this.xipClientUrl + "#0:init:id=" + stateId + "&server=" + encodeURIComponent(facade._ifpServerUrl) + "&fr=false";
23
	if (this.needFrameRecursion()) {
25
	if (this.needFrameRecursion()) {
24
		var fullClientUrl = window.location.href;
26
		var fullClientUrl = window.location.href;
25
		if ((this.xipClientUrl + "").charAt(0) == "/") {
27
		if ((this.xipClientUrl + "").charAt(0) == "/") {
26
			var endIndex = fullClientUrl.indexOf("://");
28
			var endIndex = fullClientUrl.indexOf("://");
27
			endIndex = fullClientUrl.indexOf("/", endIndex + 1);
29
			endIndex = fullClientUrl.indexOf("/", endIndex + 1);
28
			fullClientUrl = fullClientUrl.substring(0, endIndex);
30
			fullClientUrl = fullClientUrl.substring(0, endIndex);
29
		} else {
31
		} else {
30
			fullClientUrl = fullClientUrl.substring(0, fullClientUrl.lastIndexOf("/") + 1);
32
			fullClientUrl = fullClientUrl.substring(0, fullClientUrl.lastIndexOf("/") + 1);
31
		}
33
		}
32
		fullClientUrl += this.xipClientUrl;
34
		fullClientUrl += this.xipClientUrl;
33
		var serverUrl = facade._ifpServerUrl + (facade._ifpServerUrl.indexOf("?") == -1 ? "?" : "&") + "dojo.fr=1";
35
		var serverUrl = facade._ifpServerUrl + (facade._ifpServerUrl.indexOf("?") == -1 ? "?" : "&") + "dojo.fr=1";
34
		frameUrl = serverUrl + "#0:init:id=" + stateId + "&client=" + encodeURIComponent(fullClientUrl) + "&fr=" + this.needFrameRecursion();
36
		frameUrl = serverUrl + "#0:init:id=" + stateId + "&client=" + encodeURIComponent(fullClientUrl) + "&fr=" + this.needFrameRecursion();
35
	}
37
	}
36
	this._state[stateId] = {facade:facade, stateId:stateId, clientFrame:dojo.io.createIFrame(stateId, "", frameUrl)};
38
	this._state[stateId] = {facade:facade, stateId:stateId, clientFrame:dojo.io.createIFrame(stateId, "", frameUrl)};
37
	return stateId;
39
	return stateId;
38
}, receive:function (stateId, urlEncodedData) {
40
}, receive:function (stateId, urlEncodedData) {
39
	var response = {};
41
	var response = {};
40
	var nvPairs = urlEncodedData.split("&");
42
	var nvPairs = urlEncodedData.split("&");
41
	for (var i = 0; i < nvPairs.length; i++) {
43
	for (var i = 0; i < nvPairs.length; i++) {
42
		if (nvPairs[i]) {
44
		if (nvPairs[i]) {
43
			var nameValue = nvPairs[i].split("=");
45
			var nameValue = nvPairs[i].split("=");
44
			response[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
46
			response[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
45
		}
47
		}
46
	}
48
	}
47
	var state = this._state[stateId];
49
	var state = this._state[stateId];
48
	var facade = state.facade;
50
	var facade = state.facade;
49
	facade._setResponseHeaders(response.responseHeaders);
51
	facade._setResponseHeaders(response.responseHeaders);
50
	if (response.status == 0 || response.status) {
52
	if (response.status == 0 || response.status) {
51
		facade.status = parseInt(response.status, 10);
53
		facade.status = parseInt(response.status, 10);
52
	}
54
	}
53
	if (response.statusText) {
55
	if (response.statusText) {
54
		facade.statusText = response.statusText;
56
		facade.statusText = response.statusText;
55
	}
57
	}
56
	if (response.responseText) {
58
	if (response.responseText) {
57
		facade.responseText = response.responseText;
59
		facade.responseText = response.responseText;
58
		var contentType = facade.getResponseHeader("Content-Type");
60
		var contentType = facade.getResponseHeader("Content-Type");
59
		if (contentType && (contentType == "application/xml" || contentType == "text/xml")) {
61
		if (contentType && (contentType == "application/xml" || contentType == "text/xml")) {
60
			facade.responseXML = dojo.dom.createDocumentFromText(response.responseText, contentType);
62
			facade.responseXML = dojo.dom.createDocumentFromText(response.responseText, contentType);
61
		}
63
		}
62
	}
64
	}
63
	facade.readyState = 4;
65
	facade.readyState = 4;
64
	this.destroyState(stateId);
66
	this.destroyState(stateId);
65
}, clientFrameLoaded:function (stateId) {
67
}, clientFrameLoaded:function (stateId) {
66
	var state = this._state[stateId];
68
	var state = this._state[stateId];
67
	var facade = state.facade;
69
	var facade = state.facade;
68
	if (this.needFrameRecursion()) {
70
	if (this.needFrameRecursion()) {
69
		var clientWindow = window.open("", state.stateId + "_clientEndPoint");
71
		var clientWindow = window.open("", state.stateId + "_clientEndPoint");
70
	} else {
72
	} else {
71
		var clientWindow = state.clientFrame.contentWindow;
73
		var clientWindow = state.clientFrame.contentWindow;
72
	}
74
	}
73
	var reqHeaders = [];
75
	var reqHeaders = [];
74
	for (var param in facade._requestHeaders) {
76
	for (var param in facade._requestHeaders) {
75
		reqHeaders.push(param + ": " + facade._requestHeaders[param]);
77
		reqHeaders.push(param + ": " + facade._requestHeaders[param]);
76
	}
78
	}
77
	var requestData = {uri:facade._uri};
79
	var requestData = {uri:facade._uri};
78
	if (reqHeaders.length > 0) {
80
	if (reqHeaders.length > 0) {
79
		requestData.requestHeaders = reqHeaders.join("\r\n");
81
		requestData.requestHeaders = reqHeaders.join("\r\n");
80
	}
82
	}
81
	if (facade._method) {
83
	if (facade._method) {
82
		requestData.method = facade._method;
84
		requestData.method = facade._method;
83
	}
85
	}
84
	if (facade._bodyData) {
86
	if (facade._bodyData) {
85
		requestData.data = facade._bodyData;
87
		requestData.data = facade._bodyData;
86
	}
88
	}
87
	clientWindow.send(dojo.io.argsFromMap(requestData, "utf8"));
89
	clientWindow.send(dojo.io.argsFromMap(requestData, "utf8"));
88
}, destroyState:function (stateId) {
90
}, destroyState:function (stateId) {
89
	var state = this._state[stateId];
91
	var state = this._state[stateId];
90
	if (state) {
92
	if (state) {
91
		delete this._state[stateId];
93
		delete this._state[stateId];
92
		var parentNode = state.clientFrame.parentNode;
94
		var parentNode = state.clientFrame.parentNode;
93
		parentNode.removeChild(state.clientFrame);
95
		parentNode.removeChild(state.clientFrame);
94
		state.clientFrame = null;
96
		state.clientFrame = null;
95
		state = null;
97
		state = null;
96
	}
98
	}
97
}, createFacade:function () {
99
}, createFacade:function () {
98
	if (arguments && arguments[0] && arguments[0]["iframeProxyUrl"]) {
100
	if (arguments && arguments[0] && arguments[0]["iframeProxyUrl"]) {
99
		return new dojo.io.XhrIframeFacade(arguments[0]["iframeProxyUrl"]);
101
		return new dojo.io.XhrIframeFacade(arguments[0]["iframeProxyUrl"]);
100
	} else {
102
	} else {
101
		return dojo.io.XhrIframeProxy.oldGetXmlhttpObject.apply(dojo.hostenv, arguments);
103
		return dojo.io.XhrIframeProxy.oldGetXmlhttpObject.apply(dojo.hostenv, arguments);
102
	}
104
	}
103
}};
105
}};
104
dojo.io.XhrIframeProxy.oldGetXmlhttpObject = dojo.hostenv.getXmlhttpObject;
106
dojo.io.XhrIframeProxy.oldGetXmlhttpObject = dojo.hostenv.getXmlhttpObject;
105
dojo.hostenv.getXmlhttpObject = dojo.io.XhrIframeProxy.createFacade;
107
dojo.hostenv.getXmlhttpObject = dojo.io.XhrIframeProxy.createFacade;
106
dojo.io.XhrIframeFacade = function (ifpServerUrl) {
108
dojo.io.XhrIframeFacade = function (ifpServerUrl) {
107
	this._requestHeaders = {};
109
	this._requestHeaders = {};
108
	this._allResponseHeaders = null;
110
	this._allResponseHeaders = null;
109
	this._responseHeaders = {};
111
	this._responseHeaders = {};
110
	this._method = null;
112
	this._method = null;
111
	this._uri = null;
113
	this._uri = null;
112
	this._bodyData = null;
114
	this._bodyData = null;
113
	this.responseText = null;
115
	this.responseText = null;
114
	this.responseXML = null;
116
	this.responseXML = null;
115
	this.status = null;
117
	this.status = null;
116
	this.statusText = null;
118
	this.statusText = null;
117
	this.readyState = 0;
119
	this.readyState = 0;
118
	this._ifpServerUrl = ifpServerUrl;
120
	this._ifpServerUrl = ifpServerUrl;
119
	this._stateId = null;
121
	this._stateId = null;
120
};
122
};
121
dojo.lang.extend(dojo.io.XhrIframeFacade, {open:function (method, uri) {
123
dojo.lang.extend(dojo.io.XhrIframeFacade, {open:function (method, uri) {
122
	this._method = method;
124
	this._method = method;
123
	this._uri = uri;
125
	this._uri = uri;
124
	this.readyState = 1;
126
	this.readyState = 1;
125
}, setRequestHeader:function (header, value) {
127
}, setRequestHeader:function (header, value) {
126
	this._requestHeaders[header] = value;
128
	this._requestHeaders[header] = value;
127
}, send:function (stringData) {
129
}, send:function (stringData) {
128
	this._bodyData = stringData;
130
	this._bodyData = stringData;
129
	this._stateId = dojo.io.XhrIframeProxy.send(this);
131
	this._stateId = dojo.io.XhrIframeProxy.send(this);
130
	this.readyState = 2;
132
	this.readyState = 2;
131
}, abort:function () {
133
}, abort:function () {
132
	dojo.io.XhrIframeProxy.destroyState(this._stateId);
134
	dojo.io.XhrIframeProxy.destroyState(this._stateId);
133
}, getAllResponseHeaders:function () {
135
}, getAllResponseHeaders:function () {
134
	return this._allResponseHeaders;
136
	return this._allResponseHeaders;
135
}, getResponseHeader:function (header) {
137
}, getResponseHeader:function (header) {
136
	return this._responseHeaders[header];
138
	return this._responseHeaders[header];
137
}, _setResponseHeaders:function (allHeaders) {
139
}, _setResponseHeaders:function (allHeaders) {
138
	if (allHeaders) {
140
	if (allHeaders) {
139
		this._allResponseHeaders = allHeaders;
141
		this._allResponseHeaders = allHeaders;
140
		allHeaders = allHeaders.replace(/\r/g, "");
142
		allHeaders = allHeaders.replace(/\r/g, "");
141
		var nvPairs = allHeaders.split("\n");
143
		var nvPairs = allHeaders.split("\n");
142
		for (var i = 0; i < nvPairs.length; i++) {
144
		for (var i = 0; i < nvPairs.length; i++) {
143
			if (nvPairs[i]) {
145
			if (nvPairs[i]) {
144
				var nameValue = nvPairs[i].split(": ");
146
				var nameValue = nvPairs[i].split(": ");
145
				this._responseHeaders[nameValue[0]] = nameValue[1];
147
				this._responseHeaders[nameValue[0]] = nameValue[1];
146
			}
148
			}
147
		}
149
		}
148
	}
150
	}
149
}});
151
}});
150
 
152