You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2006/11/20 19:54:48 UTC

svn commit: r477287 [16/32] - in /tapestry/tapestry4/trunk: tapestry-examples/TimeTracker/ tapestry-examples/TimeTracker/src/config/ tapestry-examples/TimeTracker/src/context/WEB-INF/ tapestry-examples/TimeTracker/src/java/org/apache/tapestry/timetrack...

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/XhrIframeProxy.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/XhrIframeProxy.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/XhrIframeProxy.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/XhrIframeProxy.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,16 @@
+
+dojo.provide("dojo.io.XhrIframeProxy");dojo.require("dojo.experimental");dojo.experimental("dojo.io.XhrIframeProxy");dojo.require("dojo.io.IframeIO");dojo.require("dojo.html.iframe");dojo.require("dojo.dom");dojo.require("dojo.uri.Uri");dojo.io.XhrIframeProxy = new function(){this.xipClientUrl = dojo.uri.dojoUri("src/io/xip_client.html");this._state = {};this._stateIdCounter = 0;this.send = function(facade){var stateId = "XhrIframeProxy" + (this._stateIdCounter++);facade._stateId = stateId;this._state[stateId] = {facade: facade,stateId: stateId,clientFrame: dojo.io.createIFrame(stateId,"dojo.io.XhrIframeProxy.clientFrameLoaded('" + stateId + "');",this.xipClientUrl)};}
+this.receive = function(stateId, urlEncodedData){var response = {};var nvPairs = urlEncodedData.split("&");for(var i = 0; i < nvPairs.length; i++){if(nvPairs[i]){var nameValue = nvPairs[i].split("=");response[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);}}
+var state = this._state[stateId];var facade = state.facade;facade._setResponseHeaders(response.responseHeaders);if(response.status == 0 || response.status){facade.status = parseInt(response.status, 10);}
+if(response.statusText){facade.statusText = response.statusText;}
+if(response.responseText){facade.responseText = response.responseText;var contentType = facade.getResponseHeader("Content-Type");if(contentType && (contentType == "application/xml" || contentType == "text/xml")){facade.responseXML = dojo.dom.createDocumentFromText(response.responseText, contentType);}}
+facade.readyState = 4;this.destroyState(stateId);}
+this.clientFrameLoaded = function(stateId){var state = this._state[stateId];var facade = state.facade;var clientWindow = dojo.html.iframeContentWindow(state.clientFrame);var reqHeaders = [];for(var param in facade._requestHeaders){reqHeaders.push(param + ": " + facade._requestHeaders[param]);}
+var requestData = {uri: facade._uri};if(reqHeaders.length > 0){requestData.requestHeaders = reqHeaders.join("\r\n");}
+if(facade._method){requestData.method = facade._method;}
+if(facade._bodyData){requestData.data = facade._bodyData;}
+clientWindow.send(stateId, facade._ifpServerUrl, dojo.io.argsFromMap(requestData, "utf8"));}
+this.destroyState = function(stateId){var state = this._state[stateId];if(state){delete this._state[stateId];var parentNode = state.clientFrame.parentNode;parentNode.removeChild(state.clientFrame);state.clientFrame = null;state = null;}}
+this.createFacade = function(){if(arguments && arguments[0] && arguments[0]["iframeProxyUrl"]){return new dojo.io.XhrIframeFacade(arguments[0]["iframeProxyUrl"]);}else{return dojo.io.XhrIframeProxy.oldGetXmlhttpObject.apply(dojo.hostenv, arguments);}}}
+dojo.io.XhrIframeProxy.oldGetXmlhttpObject = dojo.hostenv.getXmlhttpObject;dojo.hostenv.getXmlhttpObject = dojo.io.XhrIframeProxy.createFacade;dojo.io.XhrIframeFacade = function(ifpServerUrl){this._requestHeaders = {};this._allResponseHeaders = null;this._responseHeaders = {};this._method = null;this._uri = null;this._bodyData = null;this.responseText = null;this.responseXML = null;this.status = null;this.statusText = null;this.readyState = 0;this._ifpServerUrl = ifpServerUrl;this._stateId = null;}
+dojo.lang.extend(dojo.io.XhrIframeFacade, {open: function(method, uri){this._method = method;this._uri = uri;this.readyState = 1;},setRequestHeader: function(header, value){this._requestHeaders[header] = value;},send: function(stringData){this._bodyData = stringData;dojo.io.XhrIframeProxy.send(this);this.readyState = 2;},abort: function(){dojo.io.XhrIframeProxy.destroyState(this._stateId);},getAllResponseHeaders: function(){return this._allResponseHeaders;},getResponseHeader: function(header){return this._responseHeaders[header];},_setResponseHeaders: function(allHeaders){if(allHeaders){this._allResponseHeaders = allHeaders;allHeaders = allHeaders.replace(/\r/g, "");var nvPairs = allHeaders.split("\n");for(var i = 0; i < nvPairs.length; i++){if(nvPairs[i]){var nameValue = nvPairs[i].split(": ");this._responseHeaders[nameValue[0]] = nameValue[1];}}}}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/XhrIframeProxy.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/__package__.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/__package__.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/__package__.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/__package__.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,2 @@
+
+dojo.kwCompoundRequire({common: ["dojo.io.common"],rhino: ["dojo.io.RhinoIO"],browser: ["dojo.io.BrowserIO", "dojo.io.cookie"],dashboard: ["dojo.io.BrowserIO", "dojo.io.cookie"]});dojo.provide("dojo.io.*");
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/__package__.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/cometd.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/cometd.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/cometd.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/cometd.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,112 @@
+
+dojo.require("dojo.io.common");dojo.provide("dojo.io.cometd");dojo.require("dojo.AdapterRegistry");dojo.require("dojo.json");dojo.require("dojo.io.BrowserIO");dojo.require("dojo.io.IframeIO");dojo.require("dojo.io.ScriptSrcIO");dojo.require("dojo.io.cookie");dojo.require("dojo.event.*");dojo.require("dojo.lang.common");dojo.require("dojo.lang.func");cometd = new function(){this.initialized = false;this.connected = false;this.connectionTypes = new dojo.AdapterRegistry(true);this.version = 0.1;this.minimumVersion = 0.1;this.clientId = null;this._isXD = false;this.handshakeReturn = null;this.currentTransport = null;this.url = null;this.lastMessage = null;this.globalTopicChannels = {};this.backlog = [];this.tunnelInit = function(childLocation, childDomain){}
+this.tunnelCollapse = function(){dojo.debug("tunnel collapsed!");}
+this.init = function(props, root, bargs){props = props||{};props.version = this.version;props.minimumVersion = this.minimumVersion;props.channel = "/meta/handshake";this.url = root||djConfig["cometdRoot"];if(!this.url){dojo.debug("no cometd root specified in djConfig and no root passed");return;}
+var bindArgs = {url: this.url,method: "POST",mimetype: "text/json",load: dojo.lang.hitch(this, "finishInit"),content: { "message": dojo.json.serialize([props]) }};var regexp = "^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$";var r = (""+window.location).match(new RegExp(regexp));if(r[4]){var tmp = r[4].split(":");var thisHost = tmp[0];var thisPort = tmp[1]||"80";r = this.url.match(new RegExp(regexp));if(r[4]){tmp = r[4].split(":");var urlHost = tmp[0];var urlPort = tmp[1]||"80";if(	(urlHost != thisHost)||
+(urlPort != thisPort) ){dojo.debug(thisHost, urlHost);dojo.debug(thisPort, urlPort);this._isXD = true;bindArgs.transport = "ScriptSrcTransport";bindArgs.jsonParamName = "jsonp";bindArgs.method = "GET";}}}
+if(bargs){dojo.lang.mixin(bindArgs, bargs);}
+return dojo.io.bind(bindArgs);}
+this.finishInit = function(type, data, evt, request){data = data[0];this.handshakeReturn = data;if(data["authSuccessful"] == false){dojo.debug("cometd authentication failed");return;}
+if(data.version < this.minimumVersion){dojo.debug("cometd protocol version mismatch. We wanted", this.minimumVersion, "but got", data.version);return;}
+this.currentTransport = this.connectionTypes.match(
+data.supportedConnectionTypes,data.version,this._isXD
+);this.currentTransport.version = data.version;this.clientId = data.clientId;this.tunnelInit = dojo.lang.hitch(this.currentTransport, "tunnelInit");this.tunnelCollapse = dojo.lang.hitch(this.currentTransport, "tunnelCollapse");this.initialized = true;this.currentTransport.startup(data);while(this.backlog.length != 0){var cur = this.backlog.shift();var fn = cur.shift();this[fn].apply(this, cur);}}
+this._getRandStr = function(){return Math.random().toString().substring(2, 10);}
+this.deliver = function(messages){dojo.lang.forEach(messages, this._deliver, this);}
+this._deliver = function(message){if(!message["channel"]){dojo.debug("cometd error: no channel for message!");return;}
+if(!this.currentTransport){this.backlog.push(["deliver", message]);return;}
+this.lastMessage = message;if(	(message.channel.length > 5)&&
+(message.channel.substr(0, 5) == "/meta")){switch(message.channel){case "/meta/subscribe":
+if(!message.successful){dojo.debug("cometd subscription error for channel", message.channel, ":", message.error);return;}
+this.subscribed(message.subscription, message);break;case "/meta/unsubscribe":
+if(!message.successful){dojo.debug("cometd unsubscription error for channel", message.channel, ":", message.error);return;}
+this.unsubscribed(message.subscription, message);break;}}
+this.currentTransport.deliver(message);var tname = (this.globalTopicChannels[message.channel]) ? message.channel : "/cometd"+message.channel;dojo.event.topic.publish(tname, message);}
+this.disconnect = function(){if(!this.currentTransport){dojo.debug("no current transport to disconnect from");return;}
+this.currentTransport.disconnect();}
+this.publish = function(channel, data, properties){if(!this.currentTransport){this.backlog.push(["publish", channel, data, properties]);return;}
+var message = {data: data,channel: channel};if(properties){dojo.lang.mixin(message, properties);}
+return this.currentTransport.sendMessage(message);}
+this.subscribe = function(					channel,useLocalTopics,objOrFunc,funcName){if(!this.currentTransport){this.backlog.push(["subscribe", channel, useLocalTopics, objOrFunc, funcName]);return;}
+if(objOrFunc){var tname = (useLocalTopics) ? channel : "/cometd"+channel;if(useLocalTopics){this.globalTopicChannels[channel] = true;}
+dojo.event.topic.subscribe(tname, objOrFunc, funcName);}
+return this.currentTransport.sendMessage({channel: "/meta/subscribe",subscription: channel});}
+this.subscribed = function(					channel,message){dojo.debug(channel);dojo.debugShallow(message);}
+this.unsubscribe = function(				channel,useLocalTopics,objOrFunc,funcName){if(!this.currentTransport){this.backlog.push(["unsubscribe", channel, useLocalTopics, objOrFunc, funcName]);return;}
+if(objOrFunc){var tname = (useLocalTopics) ? channel : "/cometd"+channel;dojo.event.topic.unsubscribe(tname, objOrFunc, funcName);}
+return this.currentTransport.sendMessage({channel: "/meta/unsubscribe",subscription: channel});}
+this.unsubscribed = function(				channel,message){dojo.debug(channel);dojo.debugShallow(message);}}
+cometd.iframeTransport = new function(){this.connected = false;this.connectionId = null;this.rcvNode = null;this.rcvNodeName = "";this.phonyForm = null;this.authToken = null;this.lastTimestamp = null;this.lastId = null;this.backlog = [];this.check = function(types, version, xdomain){return ((!xdomain)&&
+(!dojo.render.html.safari)&&
+(dojo.lang.inArray(types, "iframe")));}
+this.tunnelInit = function(){this.postToIframe({message: dojo.json.serialize([
+{channel:	"/meta/connect",clientId:	cometd.clientId,connectionType: "iframe"}
+])});}
+this.tunnelCollapse = function(){if(this.connected){this.connected = false;this.postToIframe({message: dojo.json.serialize([
+{channel:	"/meta/reconnect",clientId:	cometd.clientId,connectionId:	this.connectionId,timestamp:	this.lastTimestamp,id:			this.lastId}
+])});}}
+this.deliver = function(message){if(message["timestamp"]){this.lastTimestamp = message.timestamp;}
+if(message["id"]){this.lastId = message.id;}
+if(	(message.channel.length > 5)&&
+(message.channel.substr(0, 5) == "/meta")){switch(message.channel){case "/meta/connect":
+if(!message.successful){dojo.debug("cometd connection error:", message.error);return;}
+this.connectionId = message.connectionId;this.connected = true;this.processBacklog();break;case "/meta/reconnect":
+if(!message.successful){dojo.debug("cometd reconnection error:", message.error);return;}
+this.connected = true;break;case "/meta/subscribe":
+if(!message.successful){dojo.debug("cometd subscription error for channel", message.channel, ":", message.error);return;}
+dojo.debug(message.channel);break;}}}
+this.widenDomain = function(domainStr){var cd = domainStr||document.domain;if(cd.indexOf(".")==-1){ return; }
+var dps = cd.split(".");if(dps.length<=2){ return; }
+dps = dps.slice(dps.length-2);document.domain = dps.join(".");return document.domain;}
+this.postToIframe = function(content, url){if(!this.phonyForm){if(dojo.render.html.ie){this.phonyForm = document.createElement("<form enctype='application/x-www-form-urlencoded' method='POST' style='display: none;'>");dojo.body().appendChild(this.phonyForm);}else{this.phonyForm = document.createElement("form");this.phonyForm.style.display = "none";dojo.body().appendChild(this.phonyForm);this.phonyForm.enctype = "application/x-www-form-urlencoded";this.phonyForm.method = "POST";}}
+this.phonyForm.action = url||cometd.url;this.phonyForm.target = this.rcvNodeName;this.phonyForm.setAttribute("target", this.rcvNodeName);while(this.phonyForm.firstChild){this.phonyForm.removeChild(this.phonyForm.firstChild);}
+for(var x in content){var tn;if(dojo.render.html.ie){tn = document.createElement("<input type='hidden' name='"+x+"' value='"+content[x]+"'>");this.phonyForm.appendChild(tn);}else{tn = document.createElement("input");this.phonyForm.appendChild(tn);tn.type = "hidden";tn.name = x;tn.value = content[x];}}
+this.phonyForm.submit();}
+this.processBacklog = function(){while(this.backlog.length > 0){this.sendMessage(this.backlog.shift(), true);}}
+this.sendMessage = function(message, bypassBacklog){if((bypassBacklog)||(this.connected)){message.connectionId = this.connectionId;message.clientId = cometd.clientId;var bindArgs = {url: cometd.url||djConfig["cometdRoot"],method: "POST",mimetype: "text/json",content: { message: dojo.json.serialize([ message ]) }};return dojo.io.bind(bindArgs);}else{this.backlog.push(message);}}
+this.startup = function(handshakeData){dojo.debug("startup!");dojo.debug(dojo.json.serialize(handshakeData));if(this.connected){ return; }
+this.rcvNodeName = "cometdRcv_"+cometd._getRandStr();var initUrl = cometd.url+"/?tunnelInit=iframe";if(false && dojo.render.html.ie){this.rcvNode = new ActiveXObject("htmlfile");this.rcvNode.open();this.rcvNode.write("<html>");this.rcvNode.write("<script>document.domain = '"+document.domain+"'");this.rcvNode.write("</html>");this.rcvNode.close();var ifrDiv = this.rcvNode.createElement("div");this.rcvNode.appendChild(ifrDiv);this.rcvNode.parentWindow.dojo = dojo;ifrDiv.innerHTML = "<iframe src='"+initUrl+"'></iframe>"}else{this.rcvNode = dojo.io.createIFrame(this.rcvNodeName, "", initUrl);}}}
+cometd.mimeReplaceTransport = new function(){this.connected = false;this.connectionId = null;this.xhr = null;this.authToken = null;this.lastTimestamp = null;this.lastId = null;this.backlog = [];this.check = function(types, version, xdomain){return ((!xdomain)&&
+(dojo.render.html.mozilla)&&
+(dojo.lang.inArray(types, "mime-message-block")));}
+this.tunnelInit = function(){if(this.connected){ return; }
+this.openTunnelWith({message: dojo.json.serialize([
+{channel:	"/meta/connect",clientId:	cometd.clientId,connectionType: "mime-message-block"}
+])});this.connected = true;}
+this.tunnelCollapse = function(){if(this.connected){this.connected = false;this.openTunnelWith({message: dojo.json.serialize([
+{channel:	"/meta/reconnect",clientId:	cometd.clientId,connectionId:	this.connectionId,timestamp:	this.lastTimestamp,id:			this.lastId}
+])});}}
+this.deliver = cometd.iframeTransport.deliver;this.handleOnLoad = function(resp){cometd.deliver(dojo.json.evalJson(this.xhr.responseText));}
+this.openTunnelWith = function(content, url){this.xhr = dojo.hostenv.getXmlhttpObject();this.xhr.multipart = true;if(dojo.render.html.mozilla){this.xhr.addEventListener("load", dojo.lang.hitch(this, "handleOnLoad"), false);}else if(dojo.render.html.safari){dojo.debug("Webkit is broken with multipart responses over XHR = (");this.xhr.onreadystatechange = dojo.lang.hitch(this, "handleOnLoad");}else{this.xhr.onload = dojo.lang.hitch(this, "handleOnLoad");}
+this.xhr.open("POST", (url||cometd.url), true);this.xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");dojo.debug(dojo.json.serialize(content));this.xhr.send(dojo.io.argsFromMap(content, "utf8"));}
+this.processBacklog = function(){while(this.backlog.length > 0){this.sendMessage(this.backlog.shift(), true);}}
+this.sendMessage = function(message, bypassBacklog){if((bypassBacklog)||(this.connected)){message.connectionId = this.connectionId;message.clientId = cometd.clientId;var bindArgs = {url: cometd.url||djConfig["cometdRoot"],method: "POST",mimetype: "text/json",content: { message: dojo.json.serialize([ message ]) }};return dojo.io.bind(bindArgs);}else{this.backlog.push(message);}}
+this.startup = function(handshakeData){dojo.debugShallow(handshakeData);if(this.connected){ return; }
+this.tunnelInit();}}
+cometd.longPollTransport = new function(){this.connected = false;this.connectionId = null;this.authToken = null;this.lastTimestamp = null;this.lastId = null;this.backlog = [];this.check = function(types, version, xdomain){return ((!xdomain)&&(dojo.lang.inArray(types, "long-polling")));}
+this.tunnelInit = function(){if(this.connected){ return; }
+this.openTunnelWith({message: dojo.json.serialize([
+{channel:	"/meta/connect",clientId:	cometd.clientId,connectionType: "long-polling"}
+])});this.connected = true;}
+this.tunnelCollapse = function(){if(!this.connected){this.connected = false;dojo.debug("clientId:", cometd.clientId);this.openTunnelWith({message: dojo.json.serialize([
+{channel:	"/meta/reconnect",connectionType: "long-polling",clientId:	cometd.clientId,connectionId:	this.connectionId,timestamp:	this.lastTimestamp,id:			this.lastId}
+])});}}
+this.deliver = cometd.iframeTransport.deliver;this.openTunnelWith = function(content, url){dojo.io.bind({url: (url||cometd.url),method: "post",content: content,mimetype: "text/json",load: dojo.lang.hitch(this, function(type, data, evt, args){cometd.deliver(data);this.connected = false;this.tunnelCollapse();}),error: function(){ dojo.debug("tunnel opening failed"); }});this.connected = true;}
+this.processBacklog = function(){while(this.backlog.length > 0){this.sendMessage(this.backlog.shift(), true);}}
+this.sendMessage = function(message, bypassBacklog){if((bypassBacklog)||(this.connected)){message.connectionId = this.connectionId;message.clientId = cometd.clientId;var bindArgs = {url: cometd.url||djConfig["cometdRoot"],method: "post",mimetype: "text/json",content: { message: dojo.json.serialize([ message ]) }};return dojo.io.bind(bindArgs);}else{this.backlog.push(message);}}
+this.startup = function(handshakeData){if(this.connected){ return; }
+this.tunnelInit();}}
+cometd.callbackPollTransport = new function(){this.connected = false;this.connectionId = null;this.authToken = null;this.lastTimestamp = null;this.lastId = null;this.backlog = [];this.check = function(types, version, xdomain){return dojo.lang.inArray(types, "callback-polling");}
+this.tunnelInit = function(){if(this.connected){ return; }
+this.openTunnelWith({message: dojo.json.serialize([
+{channel:	"/meta/connect",clientId:	cometd.clientId,connectionType: "callback-polling"}
+])});this.connected = true;}
+this.tunnelCollapse = function(){if(!this.connected){this.connected = false;this.openTunnelWith({message: dojo.json.serialize([
+{channel:	"/meta/reconnect",connectionType: "long-polling",clientId:	cometd.clientId,connectionId:	this.connectionId,timestamp:	this.lastTimestamp,id:			this.lastId}
+])});}}
+this.deliver = cometd.iframeTransport.deliver;this.openTunnelWith = function(content, url){var req = dojo.io.bind({url: (url||cometd.url),content: content,mimetype: "text/json",transport: "ScriptSrcTransport",jsonParamName: "jsonp",load: dojo.lang.hitch(this, function(type, data, evt, args){dojo.debug(dojo.json.serialize(data));cometd.deliver(data);this.connected = false;this.tunnelCollapse();}),error: function(){ dojo.debug("tunnel opening failed"); }});this.connected = true;}
+this.processBacklog = function(){while(this.backlog.length > 0){this.sendMessage(this.backlog.shift(), true);}}
+this.sendMessage = function(message, bypassBacklog){if((bypassBacklog)||(this.connected)){message.connectionId = this.connectionId;message.clientId = cometd.clientId;var bindArgs = {url: cometd.url||djConfig["cometdRoot"],mimetype: "text/json",transport: "ScriptSrcTransport",jsonParamName: "jsonp",content: { message: dojo.json.serialize([ message ]) }};return dojo.io.bind(bindArgs);}else{this.backlog.push(message);}}
+this.startup = function(handshakeData){if(this.connected){ return; }
+this.tunnelInit();}}
+cometd.connectionTypes.register("mime-message-block", cometd.mimeReplaceTransport.check, cometd.mimeReplaceTransport);cometd.connectionTypes.register("long-polling", cometd.longPollTransport.check, cometd.longPollTransport);cometd.connectionTypes.register("callback-polling", cometd.callbackPollTransport.check, cometd.callbackPollTransport);cometd.connectionTypes.register("iframe", cometd.iframeTransport.check, cometd.iframeTransport);dojo.io.cometd = cometd;
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/cometd.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/common.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/common.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/common.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/common.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,34 @@
+
+dojo.provide("dojo.io.common");dojo.require("dojo.string");dojo.require("dojo.lang.extras");dojo.io.transports = [];dojo.io.hdlrFuncNames = [ "load", "error", "timeout" ];dojo.io.Request = function( url,  mimetype,  transport,  changeUrl){if((arguments.length == 1)&&(arguments[0].constructor == Object)){this.fromKwArgs(arguments[0]);}else{this.url = url;if(mimetype){ this.mimetype = mimetype; }
+if(transport){ this.transport = transport; }
+if(arguments.length >= 4){ this.changeUrl = changeUrl; }}}
+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){},error: function(type, error, transportImplementation, kwArgs){},timeout: function(type, empty, transportImplementation, kwArgs){},handle: function(type, data, transportImplementation, kwArgs){},timeoutSeconds: 0,abort: function(){ },fromKwArgs: function( kwArgs){if(kwArgs["url"]){ kwArgs.url = kwArgs.url.toString(); }
+if(kwArgs["formNode"]) { kwArgs.formNode = dojo.byId(kwArgs.formNode); }
+if(!kwArgs["method"] && kwArgs["formNode"] && kwArgs["formNode"].method) {kwArgs.method = kwArgs["formNode"].method;}
+if(!kwArgs["handle"] && kwArgs["handler"]){ kwArgs.handle = kwArgs.handler; }
+if(!kwArgs["load"] && kwArgs["loaded"]){ kwArgs.load = kwArgs.loaded; }
+if(!kwArgs["changeUrl"] && kwArgs["changeURL"]) { kwArgs.changeUrl = kwArgs.changeURL; }
+kwArgs.encoding = dojo.lang.firstValued(kwArgs["encoding"], djConfig["bindEncoding"], "");kwArgs.sendTransport = dojo.lang.firstValued(kwArgs["sendTransport"], djConfig["ioSendTransport"], false);var isFunction = dojo.lang.isFunction;for(var x=0; x<dojo.io.hdlrFuncNames.length; x++){var fn = dojo.io.hdlrFuncNames[x];if(kwArgs[fn] && isFunction(kwArgs[fn])){ continue; }
+if(kwArgs["handle"] && isFunction(kwArgs["handle"])){kwArgs[fn] = kwArgs.handle;}}
+dojo.lang.mixin(this, kwArgs);}});dojo.io.Error = function( msg,  type, num){this.message = msg;this.type =  type || "unknown";this.number = num || 0;}
+dojo.io.transports.addTransport = function(name){this.push(name);this[name] = dojo.io[name];}
+dojo.io.bind = function(request){if(!(request instanceof dojo.io.Request)){try{request = new dojo.io.Request(request);}catch(e){ dojo.debug(e); }}
+var tsName = "";if(request["transport"]){tsName = request["transport"];if(!this[tsName]){dojo.io.sendBindError(request, "No dojo.io.bind() transport with name '"
++ request["transport"] + "'.");return request;}
+if(!this[tsName].canHandle(request)){dojo.io.sendBindError(request, "dojo.io.bind() transport with name '"
++ request["transport"] + "' cannot handle this type of request.");return request;}}else{for(var x=0; x<dojo.io.transports.length; x++){var tmp = dojo.io.transports[x];if((this[tmp])&&(this[tmp].canHandle(request))){tsName = tmp;break;}}
+if(tsName == ""){dojo.io.sendBindError(request, "None of the loaded transports for dojo.io.bind()"
++ " can handle the request.");return request;}}
+this[tsName].bind(request);request.bindSuccess = true;return request;}
+dojo.io.sendBindError = function(request , message ){if((typeof request.error == "function" || typeof request.handle == "function")
+&& (typeof setTimeout == "function" || typeof setTimeout == "object")){var errorObject = new dojo.io.Error(message);setTimeout(function(){request[(typeof request.error == "function") ? "error" : "handle"]("error", errorObject, null, request);}, 50);}else{dojo.raise(message);}}
+dojo.io.queueBind = function(request){if(!(request instanceof dojo.io.Request)){try{request = new dojo.io.Request(request);}catch(e){ dojo.debug(e); }}
+var oldLoad = request.load;request.load = function(){dojo.io._queueBindInFlight = false;var ret = oldLoad.apply(this, arguments);dojo.io._dispatchNextQueueBind();return ret;}
+var oldErr = request.error;request.error = function(){dojo.io._queueBindInFlight = false;var ret = oldErr.apply(this, arguments);dojo.io._dispatchNextQueueBind();return ret;}
+dojo.io._bindQueue.push(request);dojo.io._dispatchNextQueueBind();return request;}
+dojo.io._dispatchNextQueueBind = function(){if(!dojo.io._queueBindInFlight){dojo.io._queueBindInFlight = true;if(dojo.io._bindQueue.length > 0){dojo.io.bind(dojo.io._bindQueue.shift());}else{dojo.io._queueBindInFlight = false;}}}
+dojo.io._bindQueue = [];dojo.io._queueBindInFlight = false;dojo.io.argsFromMap = function(map, encoding, last){var enc = /utf/i.test(encoding||"") ? encodeURIComponent : dojo.string.encodeAscii;var mapped = [];var control = new Object();for(var name in map){var domap = function(elt){var val = enc(name)+"="+enc(elt);mapped[(last == name) ? "push" : "unshift"](val);}
+if(!control[name]){var value = map[name];if (dojo.lang.isArray(value)){dojo.lang.forEach(value, domap);}else{domap(value);}}}
+return mapped.join("&");}
+dojo.io.setIFrameSrc = function( iframe,  src,  replace){try{var r = dojo.render.html;if(!replace){if(r.safari){iframe.location = src;}else{frames[iframe.name].location = src;}}else{var idoc;if(r.ie){idoc = iframe.contentWindow.document;}else if(r.safari){idoc = iframe.document;}else{idoc = iframe.contentWindow;}
+if(!idoc){iframe.location = src;return;}else{idoc.location.replace(src);}}}catch(e){dojo.debug(e);dojo.debug("setIFrameSrc: "+e);}}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/common.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/cookie.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/cookie.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/cookie.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/cookie.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,24 @@
+
+dojo.provide("dojo.io.cookie");dojo.io.cookie.setCookie = function(name, value, days, path, domain, secure) {var expires = -1;if(typeof days == "number" && days >= 0) {var d = new Date();d.setTime(d.getTime()+(days*24*60*60*1000));expires = d.toGMTString();}
+value = escape(value);document.cookie = name + "=" + value + ";"
++ (expires != -1 ? " expires=" + expires + ";" : "")
++ (path ? "path=" + path : "")
++ (domain ? "; domain=" + domain : "")
++ (secure ? "; secure" : "");}
+dojo.io.cookie.set = dojo.io.cookie.setCookie;dojo.io.cookie.getCookie = function(name) {var idx = document.cookie.lastIndexOf(name+'=');if(idx == -1) { return null; }
+var value = document.cookie.substring(idx+name.length+1);var end = value.indexOf(';');if(end == -1) { end = value.length; }
+value = value.substring(0, end);value = unescape(value);return value;}
+dojo.io.cookie.get = dojo.io.cookie.getCookie;dojo.io.cookie.deleteCookie = function(name) {dojo.io.cookie.setCookie(name, "-", 0);}
+dojo.io.cookie.setObjectCookie = function(name, obj, days, path, domain, secure, clearCurrent) {if(arguments.length == 5) {clearCurrent = domain;domain = null;secure = null;}
+var pairs = [], cookie, value = "";if(!clearCurrent) { cookie = dojo.io.cookie.getObjectCookie(name); }
+if(days >= 0) {if(!cookie) { cookie = {}; }
+for(var prop in obj) {if(prop == null) {delete cookie[prop];} else if(typeof obj[prop] == "string" || typeof obj[prop] == "number") {cookie[prop] = obj[prop];}}
+prop = null;for(var prop in cookie) {pairs.push(escape(prop) + "=" + escape(cookie[prop]));}
+value = pairs.join("&");}
+dojo.io.cookie.setCookie(name, value, days, path, domain, secure);}
+dojo.io.cookie.getObjectCookie = function(name) {var values = null, cookie = dojo.io.cookie.getCookie(name);if(cookie) {values = {};var pairs = cookie.split("&");for(var i = 0; i < pairs.length; i++) {var pair = pairs[i].split("=");var value = pair[1];if( isNaN(value) ) { value = unescape(pair[1]); }
+values[ unescape(pair[0]) ] = value;}}
+return values;}
+dojo.io.cookie.isSupported = function() {if(typeof navigator.cookieEnabled != "boolean") {dojo.io.cookie.setCookie("__TestingYourBrowserForCookieSupport__","CookiesAllowed", 90, null);var cookieVal = dojo.io.cookie.getCookie("__TestingYourBrowserForCookieSupport__");navigator.cookieEnabled = (cookieVal == "CookiesAllowed");if(navigator.cookieEnabled) {this.deleteCookie("__TestingYourBrowserForCookieSupport__");}}
+return navigator.cookieEnabled;}
+if(!dojo.io.cookies) { dojo.io.cookies = dojo.io.cookie; }

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/cookie.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_client.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_client.html?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_client.html (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_client.html Mon Nov 20 10:54:21 2006
@@ -0,0 +1,200 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
+	<script type="text/javascript">
+	// <!--
+	/*
+	This file is really focused on just sending one message to the server, and
+	receiving one response. The code does not expect to be re-used for multiple messages.
+	This might be reworked later if performance indicates a need for it.
+	
+	xip fragment identifier/hash values have the form:
+	#id:cmd:realUrlEncodedMessage
+
+	id: some ID that should be unique among messages. No inherent meaning,
+	        just something to make sure the hash value is unique so the message
+	        receiver knows a new message is available.
+	        
+	cmd: command to the receiver. Valid values are:
+	         - loaded: the remote frame is loaded. Only sent from server to client.
+	         - ok: the message that this page sent was received OK. The next message may
+	               now be sent.
+	         - start: the start message of a block of messages (a complete message may
+	                  need to be segmented into many messages to get around the limitiations
+	                  of the size of an URL that a browser accepts.
+	         - part: indicates this is a part of a message.
+	         - end: the end message of a block of messages. The message can now be acted upon.
+	                If the message is small enough that it doesn't need to be segmented, then
+	                just one hash value message can be sent with "end" as the command.
+	
+	To reassemble a segmented message, the realUrlEncodedMessage parts just have to be concatenated
+	together.
+	*/
+
+	//Choosing 1024 as an arbitrary limit for the URL sizes.
+	//Anecdotal info seems to indicate this is safe to use in all
+	//modern browsers.
+	xipUrlLimit = 1024;
+	xipIdCounter = 1;
+
+	function xipInit(){
+		xipIsSending = false;
+		xipServerUrl = null;
+		xipStateId = null;
+		xipRequestData = null;
+		xipCurrentHash = "";
+		xipResponseMessage = "";
+		xipRequestParts = [];
+		xipPartIndex = 0;
+		xipServerWindow = null;
+	}
+	xipInit();
+	
+	function send(stateId, ifpServerUrl, urlEncodedData){
+		if(!xipIsSending){
+			xipIsSending = true;
+
+			xipStateId = stateId;
+			xipRequestData = urlEncodedData || "";
+
+			//Modify the server URL if it is a local path and 
+			//This is done for local/same domain testing.
+			xipServerUrl = ifpServerUrl;
+			if(ifpServerUrl.indexOf("..") == 0){
+				var parts = ifpServerUrl.split("/");
+				xipServerUrl = parts[parts.length - 1];
+			}
+
+			//Fix server URL to tell it about this page's URL. So that it can call us
+			//back correctly. Use the fragment identifier to allow for caching of the server
+			//page, and hey, we're using the fragment identifier for everything else.
+			ifpServerUrl += "#" + encodeURIComponent(window.location);	
+
+			//Start counter to inspect hash value.
+			setInterval(pollHash, 10);
+
+			//Loader server iframe, then wait for the server page to call us back.
+			xipServerWindow = frames["xipServerFrame"];
+			if (!xipServerWindow){
+				xipServerWindow = document.getElementById("xipServerFrame").contentWindow;
+			}
+
+			xipServerWindow.location.replace(ifpServerUrl);
+		}
+	}
+
+	function pollHash(){
+		//Can't use location.hash because at least Firefox does a decodeURIComponent on it.
+		var urlParts = window.location.href.split("#");
+		if(urlParts.length == 2){
+			var newHash = urlParts[1];
+			if(newHash != xipCurrentHash){
+				try{
+					messageReceived(newHash);
+				}catch(e){
+					//Make sure to not keep processing the error hash value.
+					xipCurrentHash = newHash;
+					throw e;
+				}
+				xipCurrentHash = newHash;
+			}
+		}
+	}
+
+	function messageReceived(urlEncodedMessage){
+		//Split off xip header.
+		var parts = urlEncodedMessage.split(":");
+		var command = parts[1];
+		urlEncodedMessage = parts[2] || "";
+		
+		switch(command){
+			case "loaded":
+				sendRequestStart();
+				break;
+			case "ok":
+				sendRequestPart();
+				break;
+			case "start":
+				xipResponseMessage = "";
+				xipResponseMessage += urlEncodedMessage;
+				setServerUrl("ok");
+				break;
+			case "part":
+				xipResponseMessage += urlEncodedMessage;			
+				setServerUrl("ok");
+				break;
+			case "end":
+				setServerUrl("ok");
+				xipResponseMessage += urlEncodedMessage;
+				parent.dojo.io.XhrIframeProxy.receive(xipStateId, xipResponseMessage);
+				break;
+		}
+	}
+	
+	function sendRequestStart(){
+		//Break the message into parts, if necessary.
+		xipRequestParts = [];
+		var reqData = xipRequestData;
+		var urlLength = xipServerUrl.length;
+		var partLength = xipUrlLimit - urlLength;
+		var reqIndex = 0;
+
+		while((reqData.length - reqIndex) + urlLength > xipUrlLimit){
+			xipRequestParts.push(reqData.substring(reqIndex, reqIndex + partLength));
+			reqIndex += partLength;
+		}
+		xipRequestParts.push(reqData.substring(reqIndex, reqData.length));
+		
+		xipPartIndex = 0;
+		sendRequestPart();
+		
+	}
+	
+	function sendRequestPart(){
+		if(xipPartIndex < xipRequestParts.length){
+			//Get the message part.
+			var partData = xipRequestParts[xipPartIndex];
+
+			//Get the command.
+			var cmd = "part";
+			if(xipPartIndex + 1 == xipRequestParts.length){
+				cmd = "end";
+			}else if (xipPartIndex == 0){
+				cmd = "start";
+			}
+			
+			setServerUrl(cmd, partData);
+			xipPartIndex++;
+		}
+	}
+	
+	function setServerUrl(cmd, message){
+		var serverUrl = xipServerUrl + "#" + (xipIdCounter++) + ":" + cmd;
+		if(message){
+			serverUrl += ":" + message;
+		}
+
+		//Safari won't let us replace across domains.
+		if(navigator.userAgent.indexOf("Safari") == -1){
+			xipServerWindow.location.replace(serverUrl);
+		}else{
+			xipServerWindow.location = serverUrl;
+		}
+
+	}
+	// -->
+	</script>
+</head>
+<body>
+	<h4>The Dojo Toolkit -- xip_client.html</h4>
+
+	<p>This file is used for Dojo's XMLHttpRequest Iframe Proxy. This is the "client" file used
+	internally by dojo.io.XhrIframeProxy.</p>
+	
+	<iframe id="xipServerFrame"></iframe>
+</body>
+</html>

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_client.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_server.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_server.html?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_server.html (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_server.html Mon Nov 20 10:54:21 2006
@@ -0,0 +1,337 @@
+<!--
+	/*
+		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
+	*/
+	Pieces taken from Dojo source to make this file stand-alone
+-->
+<html>
+<head>
+	<title></title>
+	<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
+	<script type="text/javascript" src="isAllowed.js"></script>
+	<!--
+	BY DEFAULT THIS FILE DOES NOT WORK SO THAT YOU DON'T ACCIDENTALLY EXPOSE
+	ALL OF YOUR XHR-ENABLED SERVICES ON YOUR SITE. 
+	
+	In order for this file to work, you should define a function with the following signature:
+	
+	function isAllowedRequest(request){
+		return false;	
+	}
+	
+	Return true out of the function if you want to allow the cross-domain request.
+	
+	DON'T DEFINE THIS FUNCTION IN THIS FILE! Define it in a separate file called isAllowed.js
+	and include it in this page with a script tag that has a src attribute pointing to the file.
+	See the very first script tag in this file for an example. You do not have to place the
+	script file in the same directory as this file, just update the path above if you move it
+	somewhere else.
+	
+	Customize the isAllowedRequest function to restrict what types of requests are allowed
+	for this server. The request object has the following properties:
+	- requestHeaders: an object with the request headers that are to be added to
+	                  the XHR request.
+	- method: the HTTP method (GET, POST, etc...)
+	- uri: The URI for the request.
+	- data: The URL-encoded data for the request. For a GET request, this would
+	        be the querystring parameters. For a POST request, it wll be the
+	        body data.
+	-->
+	<script type="text/javascript">
+	// <!--
+	/*
+	See xip_client.html for more info on the xip fragment identifier protocol.
+	
+	This page uses Dojo to do the actual XMLHttpRequest (XHR) to the server, but you could
+	replace the Dojo references with your own XHR code if you like. But keep the other xip
+	code to communicate back to the xip client frame.
+	*/
+	djConfig = {
+		parseWidgets: false,
+		baseScriptUri: "./"
+	}
+	// -->
+	</script>
+	<script type="text/javascript">
+		dojo = {};
+		dojo.hostenv = {};
+		// These are in order of decreasing likelihood; this will change in time.
+		dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
+		
+		dojo.hostenv.getXmlhttpObject = function(){
+				var http = null;
+			var last_e = null;
+			try{ http = new XMLHttpRequest(); }catch(e){}
+				if(!http){
+				for(var i=0; i<3; ++i){
+					var progid = dojo.hostenv._XMLHTTP_PROGIDS[i];
+					try{
+						http = new ActiveXObject(progid);
+					}catch(e){
+						last_e = e;
+					}
+		
+					if(http){
+						dojo.hostenv._XMLHTTP_PROGIDS = [progid];  // so faster next time
+						break;
+					}
+				}
+		
+				/*if(http && !http.toString) {
+					http.toString = function() { "[object XMLHttpRequest]"; }
+				}*/
+			}
+		
+			if(!http){
+				throw "xip_server.html: XMLHTTP not available: " + last_e;
+			}
+		
+			return http;
+		}
+
+		dojo.setHeaders = function(http, headers){
+			if(headers) {
+				for(var header in headers) {
+					var headerValue = headers[header];
+					http.setRequestHeader(header, headerValue);
+				}
+			}
+		}
+
+	//Choosing 1024 as an arbitrary limit for the URL sizes.
+	//Anecdotal info seems to indicate this is safe to use in all
+	//modern browsers.
+	xipUrlLimit = 1024;
+	xipIdCounter = 1;
+
+	function xipServerInit(){
+		xipCurrentHash = "";
+		xipRequestMessage = "";
+		xipResponseParts = [];
+		xipPartIndex = 0;
+	}
+
+	function xipServerLoaded(){
+		xipServerInit();
+		xipClientUrl = decodeURIComponent(window.location.hash.substring(1, window.location.hash.length));
+		
+		setInterval(pollHash, 10);
+		setClientUrl("loaded");
+	}
+
+	function pollHash(){
+		//Can't use location.hash because at least Firefox does a decodeURIComponent on it.
+		var urlParts = window.location.href.split("#");
+		if(urlParts.length == 2){
+			var newHash = urlParts[1];
+			if(newHash != xipCurrentHash){
+				try{
+					messageReceived(newHash);
+				}catch(e){
+					//Make sure to not keep processing the error hash value.
+					xipCurrentHash = newHash;
+					throw e;
+				}
+				xipCurrentHash = newHash;
+			}
+		}
+	}
+
+	function messageReceived(urlEncodedMessage){
+		//Split off xip header.
+		var parts = urlEncodedMessage.split(":");
+		var command = parts[1];
+		urlEncodedMessage = parts[2] || "";
+		
+		switch(command){
+			case "ok":
+				sendResponsePart();
+				break;
+			case "start":
+				xipRequestMessage = "";
+				xipRequestMessage += urlEncodedMessage;
+				setClientUrl("ok");
+				break;
+			case "part":
+				xipRequestMessage += urlEncodedMessage;			
+				setClientUrl("ok");
+				break;
+			case "end":
+				setClientUrl("ok");
+				xipRequestMessage += urlEncodedMessage;
+				sendXhr();
+				break;
+		}
+	}
+
+	function sendResponse(urlEncodedData){
+		//Break the message into parts, if necessary.
+		xipResponseParts = [];
+		var resData = urlEncodedData;
+		var urlLength = xipClientUrl.length;
+		var partLength = xipUrlLimit - urlLength;
+		var resIndex = 0;
+
+		while((resData.length - resIndex) + urlLength > xipUrlLimit){
+			xipResponseParts.push(resData.substring(resIndex, resIndex + partLength));
+			resIndex += partLength;
+		}
+		xipResponseParts.push(resData.substring(resIndex, resData.length));
+		
+		xipPartIndex = 0;
+		sendResponsePart();
+	}
+	
+	function sendResponsePart(){
+		if(xipPartIndex < xipResponseParts.length){
+			//Get the message part.
+			var partData = xipResponseParts[xipPartIndex];
+			
+			//Get the command.
+			var cmd = "part";
+			if(xipPartIndex + 1 == xipResponseParts.length){
+				cmd = "end";
+			}else if (xipPartIndex == 0){
+				cmd = "start";
+			}
+
+			setClientUrl(cmd, partData);
+			xipPartIndex++;
+		}else{
+			xipServerInit();
+		}
+	}
+
+	function setClientUrl(cmd, message){
+		var clientUrl = xipClientUrl + "#" + (xipIdCounter++) + ":" + cmd;
+		if(message){
+			clientUrl += ":" + message;
+		}
+
+		//Safari won't let us replace across domains.
+		if(navigator.userAgent.indexOf("Safari") == -1){
+			parent.location.replace(clientUrl);
+		}else{
+			parent.location = clientUrl;
+		}
+	}
+
+	function xhrDone(xhr){
+		/* Need to pull off and return the following data:
+			- responseHeaders
+			- status
+			- statusText
+			- responseText
+		*/
+		var response = {};
+	
+		if(typeof(xhr.getAllResponseHeaders) != "undefined"){
+			var allHeaders = xhr.getAllResponseHeaders();
+			if(allHeaders){
+				response.responseHeaders = allHeaders;
+			}
+		}
+		
+		if(xhr.status == 0 || xhr.status){
+			response.status = xhr.status;
+		}
+		
+		if(xhr.statusText){
+			response.statusText = xhr.statusText;
+		}
+		
+		if(xhr.responseText){
+			response.responseText = xhr.responseText;
+		}
+	
+		//Build a string of the response object.
+		var result = "";
+		var isFirst = true;
+		for (var param in response){
+			if(isFirst){
+				isFirst = false;
+			}else{
+				result += "&";
+			}
+			result += param + "=" + encodeURIComponent(response[param]);
+		}
+		sendResponse(result);
+	}
+
+	function sendXhr(){
+		var request = {};
+		var nvPairs = xipRequestMessage.split("&");
+		var i = 0;
+		var nameValue = null;
+		for(i = 0; i < nvPairs.length; i++){
+			if(nvPairs[i]){
+				var nameValue = nvPairs[i].split("=");
+				request[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
+			}
+		}
+
+		//Split up the request headers, if any.
+		var headers = {};
+		if(request.requestHeaders){
+			nvPairs = request.requestHeaders.split("\r\n");
+			for(i = 0; i < nvPairs.length; i++){
+				if(nvPairs[i]){
+					nameValue = nvPairs[i].split(": ");
+					headers[decodeURIComponent(nameValue[0])] = decodeURIComponent(nameValue[1]);
+				}
+			}
+
+			request.requestHeaders = headers;
+		}
+		
+		if(isAllowedRequest(request)){
+		
+			//The request is allowed, so set up the XHR object.
+			var xhr = dojo.hostenv.getXmlhttpObject();
+			
+			//Start timer to look for readyState.
+			var xhrIntervalId = setInterval(function(){
+			
+				if(xhr.readyState == 4){
+					clearInterval(xhrIntervalId);
+					xhrDone(xhr);
+				}
+			}, 10);
+
+			//Actually start up the XHR request.
+			xhr.open(request.method, request.uri, true);
+			dojo.setHeaders(xhr, request.requestHeaders);
+			
+			var content = "";
+			if(request.data){
+				content = request.data;
+			}
+
+			try{
+				xhr.send(content);
+			}catch(e){
+				if(typeof xhr.abort == "function"){
+					xhr.abort();
+					xhrDone({status: 404, statusText: "xip_server.html error: " + e});
+				}
+			}
+		}
+	}
+
+	window.onload = xipServerLoaded;
+	// -->
+	</script>
+</head>
+<body>
+	<h4>The Dojo Toolkit -- xip_server.html</h4>
+
+	<p>This file is used for Dojo's XMLHttpRequest Iframe Proxy. This is the the file
+	that should go on the server that will actually be doing the XHR request.</p>
+</body>
+</html>

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/xip_server.html
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,14 @@
+
+dojo.provide("dojo.json");dojo.require("dojo.lang.func");dojo.require("dojo.string.extras");dojo.require("dojo.AdapterRegistry");dojo.json = {jsonRegistry: new dojo.AdapterRegistry(),register: function(			name,check,wrap,override){dojo.json.jsonRegistry.register(name, check, wrap, override);},evalJson: function( json){try {return eval("(" + json + ")");}catch(e){dojo.debug(e);return json;}},serialize: function( o){var objtype = typeof(o);if(objtype == "undefined"){return "undefined";}else if((objtype == "number")||(objtype == "boolean")){return o + "";}else if(o === null){return "null";}
+if (objtype == "string") { return dojo.string.escapeString(o); }
+var me = arguments.callee;var newObj;if(typeof(o.__json__) == "function"){newObj = o.__json__();if(o !== newObj){return me(newObj);}}
+if(typeof(o.json) == "function"){newObj = o.json();if (o !== newObj) {return me(newObj);}}
+if(objtype != "function" && typeof(o.length) == "number"){var res = [];for(var i = 0; i < o.length; i++){var val = me(o[i]);if(typeof(val) != "string"){val = "undefined";}
+res.push(val);}
+return "[" + res.join(",") + "]";}
+try {window.o = o;newObj = dojo.json.jsonRegistry.match(o);return me(newObj);}catch(e){}
+if(objtype == "function"){return null;}
+res = [];for (var k in o){var useKey;if (typeof(k) == "number"){useKey = '"' + k + '"';}else if (typeof(k) == "string"){useKey = dojo.string.escapeString(k);}else{continue;}
+val = me(o[k]);if(typeof(val) != "string"){continue;}
+res.push(useKey + ":" + val);}
+return "{" + res.join(",") + "}";}};
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,2 @@
+
+dojo.provide("dojo.lang");dojo.require("dojo.lang.common");dojo.deprecated("dojo.lang", "replaced by dojo.lang.common", "0.5");
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/__package__.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/__package__.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/__package__.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/__package__.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,4 @@
+
+dojo.kwCompoundRequire({common: [
+"dojo.lang.common","dojo.lang.assert","dojo.lang.array","dojo.lang.type","dojo.lang.func","dojo.lang.extras","dojo.lang.repr","dojo.lang.declare"
+]});dojo.provide("dojo.lang.*");
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/__package__.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/array.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/array.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/array.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/array.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,18 @@
+
+dojo.provide("dojo.lang.array");dojo.require("dojo.lang.common");dojo.lang.mixin(dojo.lang, {has: function(obj, name){try{return typeof obj[name] != "undefined";}catch(e){ return false; }},isEmpty: function(obj){if(dojo.lang.isObject(obj)){var tmp = {};var count = 0;for(var x in obj){if(obj[x] && (!tmp[x])){count++;break;}}
+return count == 0;}else if(dojo.lang.isArrayLike(obj) || dojo.lang.isString(obj)){return obj.length == 0;}},map: function(arr, obj, unary_func){var isString = dojo.lang.isString(arr);if(isString){arr = arr.split("");}
+if(dojo.lang.isFunction(obj)&&(!unary_func)){unary_func = obj;obj = dj_global;}else if(dojo.lang.isFunction(obj) && unary_func){var tmpObj = obj;obj = unary_func;unary_func = tmpObj;}
+if(Array.map){var outArr = Array.map(arr, unary_func, obj);}else{var outArr = [];for(var i=0;i<arr.length;++i){outArr.push(unary_func.call(obj, arr[i]));}}
+if(isString) {return outArr.join("");} else {return outArr;}},reduce: function(arr, initialValue, obj, binary_func){var reducedValue = initialValue;var ob = obj ? obj : dj_global;dojo.lang.map(arr,function(val){reducedValue = binary_func.call(ob, reducedValue, val);}
+);return reducedValue;},forEach: function(anArray, callback, thisObject){if(dojo.lang.isString(anArray)){anArray = anArray.split("");}
+if(Array.forEach){Array.forEach(anArray, callback, thisObject);}else{if(!thisObject){thisObject=dj_global;}
+for(var i=0,l=anArray.length; i<l; i++){callback.call(thisObject, anArray[i], i, anArray);}}},_everyOrSome: function(every, arr, callback, thisObject){if(dojo.lang.isString(arr)){arr = arr.split("");}
+if(Array.every){return Array[ every ? "every" : "some" ](arr, callback, thisObject);}else{if(!thisObject){thisObject = dj_global;}
+for(var i=0,l=arr.length; i<l; i++){var result = callback.call(thisObject, arr[i], i, arr);if(every && !result){return false;}else if((!every)&&(result)){return true;}}
+return Boolean(every);}},every: function(arr, callback, thisObject){return this._everyOrSome(true, arr, callback, thisObject);},some: function(arr, callback, thisObject){return this._everyOrSome(false, arr, callback, thisObject);},filter: function(arr, callback, thisObject){var isString = dojo.lang.isString(arr);if(isString){ arr = arr.split(""); }
+var outArr;if(Array.filter){outArr = Array.filter(arr, callback, thisObject);} else {if(!thisObject){if(arguments.length >= 3){ dojo.raise("thisObject doesn't exist!"); }
+thisObject = dj_global;}
+outArr = [];for(var i = 0; i < arr.length; i++){if(callback.call(thisObject, arr[i], i, arr)){outArr.push(arr[i]);}}}
+if(isString){return outArr.join("");} else {return outArr;}},unnest: function(){var out = [];for(var i = 0; i < arguments.length; i++){if(dojo.lang.isArrayLike(arguments[i])){var add = dojo.lang.unnest.apply(this, arguments[i]);out = out.concat(add);}else{out.push(arguments[i]);}}
+return out;},toArray: function(arrayLike, startOffset){var array = [];for(var i = startOffset||0; i < arrayLike.length; i++){array.push(arrayLike[i]);}
+return array;}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/array.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/assert.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/assert.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/assert.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/assert.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,10 @@
+
+dojo.provide("dojo.lang.assert");dojo.require("dojo.lang.common");dojo.require("dojo.lang.array");dojo.require("dojo.lang.type");dojo.lang.assert = function( booleanValue,  message){if(!booleanValue){var errorMessage = "An assert statement failed.\n" +
+"The method dojo.lang.assert() was called with a 'false' value.\n";if(message){errorMessage += "Here's the assert message:\n" + message + "\n";}
+throw new Error(errorMessage);}}
+dojo.lang.assertType = function( value,  type,  keywordParameters){if (dojo.lang.isString(keywordParameters)) {dojo.deprecated('dojo.lang.assertType(value, type, "message")', 'use dojo.lang.assertType(value, type) instead', "0.5");}
+if(!dojo.lang.isOfType(value, type, keywordParameters)){if(!dojo.lang.assertType._errorMessage){dojo.lang.assertType._errorMessage = "Type mismatch: dojo.lang.assertType() failed.";}
+dojo.lang.assert(false, dojo.lang.assertType._errorMessage);}}
+dojo.lang.assertValidKeywords = function( object,  expectedProperties,  message){var key;if(!message){if(!dojo.lang.assertValidKeywords._errorMessage){dojo.lang.assertValidKeywords._errorMessage = "In dojo.lang.assertValidKeywords(), found invalid keyword:";}
+message = dojo.lang.assertValidKeywords._errorMessage;}
+if(dojo.lang.isArray(expectedProperties)){for(key in object){if(!dojo.lang.inArray(expectedProperties, key)){dojo.lang.assert(false, message + " " + key);}}}else{for(key in object){if(!(key in expectedProperties)){dojo.lang.assert(false, message + " " + key);}}}}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/assert.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/common.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/common.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/common.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/common.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,42 @@
+
+dojo.provide("dojo.lang.common");dojo.lang.inherits = function( subclass,  superclass){if(typeof superclass != 'function'){dojo.raise("dojo.inherits: superclass argument ["+superclass+"] must be a function (subclass: ["+subclass+"']");}
+subclass.prototype = new superclass();subclass.prototype.constructor = subclass;subclass.superclass = superclass.prototype;subclass['super'] = superclass.prototype;}
+dojo.lang._mixin = function( obj,  props){var tobj = {};for(var x in props){if((typeof tobj[x] == "undefined") || (tobj[x] != props[x])){obj[x] = props[x];}}
+if(dojo.render.html.ie
+&& (typeof(props["toString"]) == "function")
+&& (props["toString"] != obj["toString"])
+&& (props["toString"] != tobj["toString"]))
+{obj.toString = props.toString;}
+return obj;}
+dojo.lang.mixin = function( obj, props){for(var i=1, l=arguments.length; i<l; i++){dojo.lang._mixin(obj, arguments[i]);}
+return obj;}
+dojo.lang.extend = function( constructor,  props){for(var i=1, l=arguments.length; i<l; i++){dojo.lang._mixin(constructor.prototype, arguments[i]);}
+return constructor;}
+dojo.inherits = dojo.lang.inherits;dojo.mixin = dojo.lang.mixin;dojo.extend = dojo.lang.extend;dojo.lang.find = function(			array,value,identity,findLast){if(!dojo.lang.isArrayLike(array) && dojo.lang.isArrayLike(value)) {dojo.deprecated('dojo.lang.find(value, array)', 'use dojo.lang.find(array, value) instead', "0.5");var temp = array;array = value;value = temp;}
+var isString = dojo.lang.isString(array);if(isString) { array = array.split(""); }
+if(findLast) {var step = -1;var i = array.length - 1;var end = -1;} else {var step = 1;var i = 0;var end = array.length;}
+if(identity){while(i != end) {if(array[i] === value){ return i; }
+i += step;}}else{while(i != end) {if(array[i] == value){ return i; }
+i += step;}}
+return -1;}
+dojo.lang.indexOf = dojo.lang.find;dojo.lang.findLast = function( array,  value,  identity){return dojo.lang.find(array, value, identity, true);}
+dojo.lang.lastIndexOf = dojo.lang.findLast;dojo.lang.inArray = function(array , value ){return dojo.lang.find(array, value) > -1;}
+dojo.lang.isObject = function( it){if(typeof it == "undefined"){ return false; }
+return (typeof it == "object" || it === null || dojo.lang.isArray(it) || dojo.lang.isFunction(it));}
+dojo.lang.isArray = function( it){return (it && it instanceof Array || typeof it == "array");}
+dojo.lang.isArrayLike = function( it){if((!it)||(dojo.lang.isUndefined(it))){ return false; }
+if(dojo.lang.isString(it)){ return false; }
+if(dojo.lang.isFunction(it)){ return false; }
+if(dojo.lang.isArray(it)){ return true; }
+if((it.tagName)&&(it.tagName.toLowerCase()=='form')){ return false; }
+if(dojo.lang.isNumber(it.length) && isFinite(it.length)){ return true; }
+return false;}
+dojo.lang.isFunction = function( it){if(!it){ return false; }
+if((typeof(it) == "function") && (it == "[object NodeList]")) { return false; }
+return (it instanceof Function || typeof it == "function");}
+dojo.lang.isString = function( it){return (typeof it == "string" || it instanceof String);}
+dojo.lang.isAlien = function( it){if(!it){ return false; }
+return !dojo.lang.isFunction() && /\{\s*\[native code\]\s*\}/.test(String(it));}
+dojo.lang.isBoolean = function( it){return (it instanceof Boolean || typeof it == "boolean");}
+dojo.lang.isNumber = function( it){return (it instanceof Number || typeof it == "number");}
+dojo.lang.isUndefined = function( it){return ((typeof(it) == "undefined")&&(it == undefined));}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/common.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/declare.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/declare.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/declare.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/declare.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,17 @@
+
+dojo.provide("dojo.lang.declare");dojo.require("dojo.lang.common");dojo.require("dojo.lang.extras");dojo.lang.declare = function( className,  superclass,  init,  props){if((dojo.lang.isFunction(props))||((!props)&&(!dojo.lang.isFunction(init)))){var temp = props;props = init;init = temp;}
+var mixins = [ ];if(dojo.lang.isArray(superclass)){mixins = superclass;superclass = mixins.shift();}
+if(!init){init = dojo.evalObjPath(className, false);if((init)&&(!dojo.lang.isFunction(init))){ init = null };}
+var ctor = dojo.lang.declare._makeConstructor();var scp = (superclass ? superclass.prototype : null);if(scp){scp.prototyping = true;ctor.prototype = new superclass();scp.prototyping = false;}
+ctor.superclass = scp;ctor.mixins = mixins;for(var i=0,l=mixins.length; i<l; i++){dojo.lang.extend(ctor, mixins[i].prototype);}
+ctor.prototype.initializer = null;ctor.prototype.declaredClass = className;if(dojo.lang.isArray(props)){dojo.lang.extend.apply(dojo.lang, [ctor].concat(props));}else{dojo.lang.extend(ctor, (props)||{});}
+dojo.lang.extend(ctor, dojo.lang.declare._common);ctor.prototype.constructor = ctor;ctor.prototype.initializer = (ctor.prototype.initializer)||(init)||(function(){});dojo.lang.setObjPathValue(className, ctor, null, true);return ctor;}
+dojo.lang.declare._makeConstructor = function() {return function(){var self = this._getPropContext();var s = self.constructor.superclass;if((s)&&(s.constructor)){if(s.constructor==arguments.callee){this._inherited("constructor", arguments);}else{this._contextMethod(s, "constructor", arguments);}}
+var ms = (self.constructor.mixins)||([]);for(var i=0, m; (m=ms[i]); i++) {(((m.prototype)&&(m.prototype.initializer))||(m)).apply(this, arguments);}
+if((!this.prototyping)&&(self.initializer)){self.initializer.apply(this, arguments);}}}
+dojo.lang.declare._common = {_getPropContext: function() { return (this.___proto||this); },_contextMethod: function(ptype, method, args){var result, stack = this.___proto;this.___proto = ptype;try { result = ptype[method].apply(this,(args||[])); }
+catch(e) { throw e; }
+finally { this.___proto = stack; }
+return result;},_inherited: function(prop, args){var p = this._getPropContext();do{if((!p.constructor)||(!p.constructor.superclass)){return;}
+p = p.constructor.superclass;}while(!(prop in p));return (dojo.lang.isFunction(p[prop]) ? this._contextMethod(p, prop, args) : p[prop]);},inherited: function(prop, args){dojo.deprecated("'inherited' method is dangerous, do not up-call! 'inherited' is slated for removal in 0.5; name your super class (or use superclass property) instead.", "0.5");this._inherited(prop, args);}}
+dojo.declare = dojo.lang.declare;
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/declare.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/extras.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/extras.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/extras.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/extras.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,17 @@
+
+dojo.provide("dojo.lang.extras");dojo.require("dojo.lang.common");dojo.lang.setTimeout = function(func, delay ){var context = window, argsStart = 2;if(!dojo.lang.isFunction(func)){context = func;func = delay;delay = arguments[2];argsStart++;}
+if(dojo.lang.isString(func)){func = context[func];}
+var args = [];for (var i = argsStart; i < arguments.length; i++){args.push(arguments[i]);}
+return dojo.global().setTimeout(function () { func.apply(context, args); }, delay);}
+dojo.lang.clearTimeout = function(timer){dojo.global().clearTimeout(timer);}
+dojo.lang.getNameInObj = function(ns, item){if(!ns){ ns = dj_global; }
+for(var x in ns){if(ns[x] === item){return new String(x);}}
+return null;}
+dojo.lang.shallowCopy = function(obj, deep){var i, ret;if(obj === null){  return null; }
+if(dojo.lang.isObject(obj)){ret = new obj.constructor();for(i in obj){if(dojo.lang.isUndefined(ret[i])){ret[i] = deep ? dojo.lang.shallowCopy(obj[i], deep) : obj[i];}}} else if(dojo.lang.isArray(obj)){ret = [];for(i=0; i<obj.length; i++){ret[i] = deep ? dojo.lang.shallowCopy(obj[i], deep) : obj[i];}} else {ret = obj;}
+return ret;}
+dojo.lang.firstValued = function(){for(var i = 0; i < arguments.length; i++){if(typeof arguments[i] != "undefined"){return arguments[i];}}
+return undefined;}
+dojo.lang.getObjPathValue = function(objpath, context, create){with(dojo.parseObjPath(objpath, context, create)){return dojo.evalProp(prop, obj, create);}}
+dojo.lang.setObjPathValue = function(objpath, value, context, create){if(arguments.length < 4){create = true;}
+with(dojo.parseObjPath(objpath, context, create)){if(obj && (create || (prop in obj))){obj[prop] = value;}}}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/extras.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/func.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/func.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/func.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/func.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,19 @@
+
+dojo.provide("dojo.lang.func");dojo.require("dojo.lang.common");dojo.lang.hitch = function(thisObject, method){var fcn = (dojo.lang.isString(method) ? thisObject[method] : method) || function(){};return function() {return fcn.apply(thisObject, arguments);};}
+dojo.lang.anonCtr = 0;dojo.lang.anon = {};dojo.lang.nameAnonFunc = function(anonFuncPtr, namespaceObj, searchForNames){var nso = (namespaceObj || dojo.lang.anon);if( (searchForNames) ||
+((dj_global["djConfig"])&&(djConfig["slowAnonFuncLookups"] == true)) ){for(var x in nso){try{if(nso[x] === anonFuncPtr){return x;}}catch(e){}}}
+var ret = "__"+dojo.lang.anonCtr++;while(typeof nso[ret] != "undefined"){ret = "__"+dojo.lang.anonCtr++;}
+nso[ret] = anonFuncPtr;return ret;}
+dojo.lang.forward = function(funcName){return function(){return this[funcName].apply(this, arguments);};}
+dojo.lang.curry = function(ns, func ){var outerArgs = [];ns = ns||dj_global;if(dojo.lang.isString(func)){func = ns[func];}
+for(var x=2; x<arguments.length; x++){outerArgs.push(arguments[x]);}
+var ecount = (func["__preJoinArity"]||func.length) - outerArgs.length;function gather(nextArgs, innerArgs, expected){var texpected = expected;var totalArgs = innerArgs.slice(0);for(var x=0; x<nextArgs.length; x++){totalArgs.push(nextArgs[x]);}
+expected = expected-nextArgs.length;if(expected<=0){var res = func.apply(ns, totalArgs);expected = texpected;return res;}else{return function(){return gather(arguments,totalArgs,expected);};}}
+return gather([], outerArgs, ecount);}
+dojo.lang.curryArguments = function(ns, func, args, offset){var targs = [];var x = offset||0;for(x=offset; x<args.length; x++){targs.push(args[x]);}
+return dojo.lang.curry.apply(dojo.lang, [ns, func].concat(targs));}
+dojo.lang.tryThese = function(){for(var x=0; x<arguments.length; x++){try{if(typeof arguments[x] == "function"){var ret = (arguments[x]());if(ret){return ret;}}}catch(e){dojo.debug(e);}}}
+dojo.lang.delayThese = function(farr, cb, delay, onend){if(!farr.length){if(typeof onend == "function"){onend();}
+return;}
+if((typeof delay == "undefined")&&(typeof cb == "number")){delay = cb;cb = function(){};}else if(!cb){cb = function(){};if(!delay){ delay = 0; }}
+setTimeout(function(){(farr.shift())();cb();dojo.lang.delayThese(farr, cb, delay, onend);}, delay);}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/func.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/repr.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/repr.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/repr.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/repr.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,10 @@
+
+dojo.provide("dojo.lang.repr");dojo.require("dojo.lang.common");dojo.require("dojo.AdapterRegistry");dojo.require("dojo.string.extras");dojo.lang.reprRegistry = new dojo.AdapterRegistry();dojo.lang.registerRepr = function(name, check, wrap, override){dojo.lang.reprRegistry.register(name, check, wrap, override);};dojo.lang.repr = function(obj){if(typeof(obj) == "undefined"){return "undefined";}else if(obj === null){return "null";}
+try{if(typeof(obj["__repr__"]) == 'function'){return obj["__repr__"]();}else if((typeof(obj["repr"]) == 'function')&&(obj.repr != arguments.callee)){return obj["repr"]();}
+return dojo.lang.reprRegistry.match(obj);}catch(e){if(typeof(obj.NAME) == 'string' && (
+obj.toString == Function.prototype.toString ||
+obj.toString == Object.prototype.toString
+)){return obj.NAME;}}
+if(typeof(obj) == "function"){obj = (obj + "").replace(/^\s+/, "");var idx = obj.indexOf("{");if(idx != -1){obj = obj.substr(0, idx) + "{...}";}}
+return obj + "";}
+dojo.lang.reprArrayLike = function(arr){try{var na = dojo.lang.map(arr, dojo.lang.repr);return "[" + na.join(", ") + "]";}catch(e){ }};(function(){var m = dojo.lang;m.registerRepr("arrayLike", m.isArrayLike, m.reprArrayLike);m.registerRepr("string", m.isString, m.reprString);m.registerRepr("numbers", m.isNumber, m.reprNumber);m.registerRepr("boolean", m.isBoolean, m.reprNumber);})();
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/repr.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Streamer.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Streamer.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Streamer.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Streamer.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,8 @@
+
+dojo.provide("dojo.lang.timing.Streamer");dojo.require("dojo.lang.timing.Timer");dojo.lang.timing.Streamer = function(
+input,output,interval,minimum,initialData
+){var self = this;var queue = [];this.interval = interval || 1000;this.minimumSize = minimum || 10;this.inputFunction = input || function(q){ };this.outputFunction = output || function(point){ };var timer = new dojo.lang.timing.Timer(this.interval);var tick = function(){self.onTick(self);if(queue.length < self.minimumSize){self.inputFunction(queue);}
+var obj = queue.shift();while(typeof(obj) == "undefined" && queue.length > 0){obj = queue.shift();}
+if(typeof(obj) == "undefined"){self.stop();return;}
+self.outputFunction(obj);};this.setInterval = function(ms){this.interval = ms;timer.setInterval(ms);};this.onTick = function(obj){ };this.start = function(){if(typeof(this.inputFunction) == "function" && typeof(this.outputFunction) == "function"){timer.start();return;}
+dojo.raise("You cannot start a Streamer without an input and an output function.");};this.onStart = function(){ };this.stop = function(){timer.stop();};this.onStop = function(){ };timer.onTick = this.tick;timer.onStart = this.onStart;timer.onStop = this.onStop;if(initialData){queue.concat(initialData);}};
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Streamer.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Timer.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Timer.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Timer.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Timer.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,5 @@
+
+dojo.provide("dojo.lang.timing.Timer");dojo.require("dojo.lang.func");dojo.lang.timing.Timer = function( interval){this.timer = null;this.isRunning = false;this.interval = interval;this.onStart = null;this.onStop = null;};dojo.extend(dojo.lang.timing.Timer, {onTick : function(){},setInterval : function(interval){if (this.isRunning){dj_global.clearInterval(this.timer);}
+this.interval = interval;if (this.isRunning){this.timer = dj_global.setInterval(dojo.lang.hitch(this, "onTick"), this.interval);}},start : function(){if (typeof this.onStart == "function"){this.onStart();}
+this.isRunning = true;this.timer = dj_global.setInterval(dojo.lang.hitch(this, "onTick"), this.interval);},stop : function(){if (typeof this.onStop == "function"){this.onStop();}
+this.isRunning = false;dj_global.clearInterval(this.timer);}});
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/Timer.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/__package__.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/__package__.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/__package__.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/__package__.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,2 @@
+
+dojo.provide("dojo.lang.timing.*");
\ No newline at end of file

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/timing/__package__.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/type.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/type.js?view=auto&rev=477287
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/type.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/type.js Mon Nov 20 10:54:21 2006
@@ -0,0 +1,61 @@
+
+dojo.provide("dojo.lang.type");dojo.require("dojo.lang.common");dojo.lang.whatAmI = function(value) {dojo.deprecated("dojo.lang.whatAmI", "use dojo.lang.getType instead", "0.5");return dojo.lang.getType(value);}
+dojo.lang.whatAmI.custom = {};dojo.lang.getType = function( value){try {if(dojo.lang.isArray(value)) {return "array";}
+if(dojo.lang.isFunction(value)) {return "function";}
+if(dojo.lang.isString(value)) {return "string";}
+if(dojo.lang.isNumber(value)) {return "number";}
+if(dojo.lang.isBoolean(value)) {return "boolean";}
+if(dojo.lang.isAlien(value)) {return "alien";}
+if(dojo.lang.isUndefined(value)) {return "undefined";}
+for(var name in dojo.lang.whatAmI.custom) {if(dojo.lang.whatAmI.custom[name](value)) {return name;}}
+if(dojo.lang.isObject(value)) {return "object";}} catch(e) {}
+return "unknown";}
+dojo.lang.isNumeric = function( value){return (!isNaN(value)
+&& isFinite(value)
+&& (value != null)
+&& !dojo.lang.isBoolean(value)
+&& !dojo.lang.isArray(value)
+&& !/^\s*$/.test(value)
+);}
+dojo.lang.isBuiltIn = function( value){return (dojo.lang.isArray(value)
+|| dojo.lang.isFunction(value)
+|| dojo.lang.isString(value)
+|| dojo.lang.isNumber(value)
+|| dojo.lang.isBoolean(value)
+|| (value == null)
+|| (value instanceof Error)
+|| (typeof value == "error")
+);}
+dojo.lang.isPureObject = function( value){return ((value != null)
+&& dojo.lang.isObject(value)
+&& value.constructor == Object
+);}
+dojo.lang.isOfType = function( value,  type,  keywordParameters) {var optional = false;if (keywordParameters) {optional = keywordParameters["optional"];}
+if (optional && ((value === null) || dojo.lang.isUndefined(value))) {return true;}
+if(dojo.lang.isArray(type)){var arrayOfTypes = type;for(var i in arrayOfTypes){var aType = arrayOfTypes[i];if(dojo.lang.isOfType(value, aType)) {return true;}}
+return false;}else{if(dojo.lang.isString(type)){type = type.toLowerCase();}
+switch (type) {case Array:
+case "array":
+return dojo.lang.isArray(value);case Function:
+case "function":
+return dojo.lang.isFunction(value);case String:
+case "string":
+return dojo.lang.isString(value);case Number:
+case "number":
+return dojo.lang.isNumber(value);case "numeric":
+return dojo.lang.isNumeric(value);case Boolean:
+case "boolean":
+return dojo.lang.isBoolean(value);case Object:
+case "object":
+return dojo.lang.isObject(value);case "pureobject":
+return dojo.lang.isPureObject(value);case "builtin":
+return dojo.lang.isBuiltIn(value);case "alien":
+return dojo.lang.isAlien(value);case "undefined":
+return dojo.lang.isUndefined(value);case null:
+case "null":
+return (value === null);case "optional":
+dojo.deprecated('dojo.lang.isOfType(value, [type, "optional"])', 'use dojo.lang.isOfType(value, type, {optional: true} ) instead', "0.5");return ((value === null) || dojo.lang.isUndefined(value));default:
+if (dojo.lang.isFunction(type)) {return (value instanceof type);} else {dojo.raise("dojo.lang.isOfType() was passed an invalid type");}}}
+dojo.raise("If we get here, it means a bug was introduced above.");}
+dojo.lang.getObject=function( str){var parts=str.split("."), i=0, obj=dj_global;do{obj=obj[parts[i++]];}while(i<parts.length&&obj);return (obj!=dj_global)?obj:null;}
+dojo.lang.doesObjectExist=function( str){var parts=str.split("."), i=0, obj=dj_global;do{obj=obj[parts[i++]];}while(i<parts.length&&obj);return (obj&&obj!=dj_global);}

Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang/type.js
------------------------------------------------------------------------------
    svn:eol-style = native