tapestry-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jkuhn...@apache.org
Subject svn commit: r479226 [19/35] - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/components/ js/dojo/ js/dojo/nls/ js/dojo/src/ js/dojo/src/behavior/ js/dojo/src/cal/ js/dojo/src/charting/ js/dojo/src/charting/svg/ js/dojo/sr...
Date Sat, 25 Nov 2006 22:59:01 GMT
Propchange: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/BrowserIO.js
------------------------------------------------------------------------------
    svn:eol-style = native

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/IframeIO.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/IframeIO.js?view=auto&rev=479226
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/IframeIO.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/IframeIO.js Sat Nov 25 14:58:38 2006
@@ -0,0 +1,44 @@
+
+dojo.provide("dojo.io.IframeIO");dojo.require("dojo.io.BrowserIO");dojo.require("dojo.uri.*");dojo.io.createIFrame = function(fname, onloadstr, uri){if(window[fname]){ return window[fname]; }
+if(window.frames[fname]){ return window.frames[fname]; }
+var r = dojo.render.html;var cframe = null;var turi = uri||dojo.uri.dojoUri("iframe_history.html?noInit=true");var ifrstr = ((r.ie)&&(dojo.render.os.win)) ? '<iframe name="'+fname+'" src="'+turi+'" onload="'+onloadstr+'">' : 'iframe';cframe = document.createElement(ifrstr);with(cframe){name = fname;setAttribute("name", fname);id = fname;}
+dojo.body().appendChild(cframe);window[fname] = cframe;with(cframe.style){if(!r.safari){position = "absolute";}
+left = top = "0px";height = width = "1px";visibility = "hidden";}
+if(!r.ie){dojo.io.setIFrameSrc(cframe, turi, true);cframe.onload = new Function(onloadstr);}
+return cframe;}
+dojo.io.IframeTransport = new function(){var _this = this;this.currentRequest = null;this.requestQueue = [];this.iframeName = "dojoIoIframe";this.fireNextRequest = function(){try{if((this.currentRequest)||(this.requestQueue.length == 0)){ return; }
+var cr = this.currentRequest = this.requestQueue.shift();cr._contentToClean = [];var fn = cr["formNode"];var content = cr["content"] || {};if(cr.sendTransport) {content["dojo.transport"] = "iframe";}
+if(fn){if(content){for(var x in content){if(!fn[x]){var tn;if(dojo.render.html.ie){tn = document.createElement("<input type='hidden' name='"+x+"' value='"+content[x]+"'>");fn.appendChild(tn);}else{tn = document.createElement("input");fn.appendChild(tn);tn.type = "hidden";tn.name = x;tn.value = content[x];}
+cr._contentToClean.push(x);}else{fn[x].value = content[x];}}}
+if(cr["url"]){cr._originalAction = fn.getAttribute("action");fn.setAttribute("action", cr.url);}
+if(!fn.getAttribute("method")){fn.setAttribute("method", (cr["method"]) ? cr["method"] : "post");}
+cr._originalTarget = fn.getAttribute("target");fn.setAttribute("target", this.iframeName);fn.target = this.iframeName;fn.submit();}else{var query = dojo.io.argsFromMap(this.currentRequest.content);var tmpUrl = cr.url + (cr.url.indexOf("?") > -1 ? "&" : "?") + query;dojo.io.setIFrameSrc(this.iframe, tmpUrl, true);}}catch(e){this.iframeOnload(e);}}
+this.canHandle = function(kwArgs){return (
+(
+dojo.lang.inArray([	"text/plain", "text/html", "text/javascript", "text/json", "application/json"], kwArgs["mimetype"])
+)&&(
+dojo.lang.inArray(["post", "get"], kwArgs["method"].toLowerCase())
+)&&(
+!  ((kwArgs["sync"])&&(kwArgs["sync"] == true))
+)
+);}
+this.bind = function(kwArgs){if(!this["iframe"]){ this.setUpIframe(); }
+this.requestQueue.push(kwArgs);this.fireNextRequest();return;}
+this.setUpIframe = function(){this.iframe = dojo.io.createIFrame(this.iframeName, "dojo.io.IframeTransport.iframeOnload();");}
+this.iframeOnload = function(errorObject ){if(!_this.currentRequest){_this.fireNextRequest();return;}
+var req = _this.currentRequest;if(req.formNode){var toClean = req._contentToClean;for(var i = 0; i < toClean.length; i++) {var key = toClean[i];if(dojo.render.html.safari){var fNode = req.formNode;for(var j = 0; j < fNode.childNodes.length; j++){var chNode = fNode.childNodes[j];if(chNode.name == key){var pNode = chNode.parentNode;pNode.removeChild(chNode);break;}}}else{var input = req.formNode[key];req.formNode.removeChild(input);req.formNode[key] = null;}}
+if(req["_originalAction"]){req.formNode.setAttribute("action", req._originalAction);}
+if(req["_originalTarget"]){req.formNode.setAttribute("target", req._originalTarget);req.formNode.target = req._originalTarget;}}
+var contentDoc = function(iframe_el){var doc = iframe_el.contentDocument ||
+(
+(iframe_el.contentWindow)&&(iframe_el.contentWindow.document)
+) ||
+(
+(iframe_el.name)&&(document.frames[iframe_el.name])&&
+(document.frames[iframe_el.name].document)
+) || null;return doc;};var value;var success = false;if (errorObject){this._callError(req, "IframeTransport Request Error: " + errorObject);}else{var ifd = contentDoc(_this.iframe);try{var cmt = req.mimetype;if((cmt == "text/javascript")||(cmt == "text/json")||(cmt == "application/json")){var js = ifd.getElementsByTagName("textarea")[0].value;if(cmt == "text/json" || cmt == "application/json") { js = "(" + js + ")"; }
+value = dj_eval(js);}else if(cmt == "text/html"){value = ifd;}else{value = ifd.getElementsByTagName("textarea")[0].value;}
+success = true;}catch(e){this._callError(req, "IframeTransport Error: " + e);}}
+try {if(success && dojo.lang.isFunction(req["load"])){req.load("load", value, req);}} catch(e) {throw e;} finally {_this.currentRequest = null;_this.fireNextRequest();}}
+this._callError = function(req , message ){var errObj = new dojo.io.Error(message);if(dojo.lang.isFunction(req["error"])){req.error("error", errObj, req);}}
+dojo.io.transports.addTransport("IframeTransport");}

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

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/RepubsubIO.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/RepubsubIO.js?view=auto&rev=479226
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/RepubsubIO.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/RepubsubIO.js Sat Nov 25 14:58:38 2006
@@ -0,0 +1,64 @@
+
+dojo.require("dojo.event.*");dojo.require("dojo.io.BrowserIO");dojo.provide("dojo.io.RepubsubIO");dojo.io.repubsubTranport = new function(){var rps = dojo.io.repubsub;this.canHandle = function(kwArgs){if((kwArgs["mimetype"] == "text/javascript")&&(kwArgs["method"] == "repubsub")){return true;}
+return false;}
+this.bind = function(kwArgs){if(!rps.isInitialized){rps.init();}
+if(!rps.topics[kwArgs.url]){kwArgs.rpsLoad = function(evt){kwArgs.load("load", evt);}
+rps.subscribe(kwArgs.url, kwArgs, "rpsLoad");}
+if(kwArgs["content"]){var cEvt = dojo.io.repubsubEvent.initFromProperties(kwArgs.content);rps.publish(kwArgs.url, cEvt);}}
+dojo.io.transports.addTransport("repubsubTranport");}
+dojo.io.repubsub = new function(){this.initDoc = "init.html";this.isInitialized = false;this.subscriptionBacklog = [];this.debug = true;this.rcvNodeName = null;this.sndNodeName = null;this.rcvNode = null;this.sndNode = null;this.canRcv = false;this.canSnd = false;this.canLog = false;this.sndTimer = null;this.windowRef = window;this.backlog = [];this.tunnelInitCount = 0;this.tunnelFrameKey = "tunnel_frame";this.serverBaseURL = location.protocol+"//"+location.host+location.pathname;this.logBacklog = [];this.getRandStr = function(){return Math.random().toString().substring(2, 10);}
+this.userid = "guest";this.tunnelID = this.getRandStr();this.attachPathList = [];this.topics = [];this.parseGetStr = function(){var baseUrl = document.location.toString();var params = baseUrl.split("?", 2);if(params.length > 1){var paramStr = params[1];var pairs = paramStr.split("&");var opts = [];for(var x in pairs){var sp = pairs[x].split("=");try{opts[sp[0]]=eval(sp[1]);}catch(e){opts[sp[0]]=sp[1];}}
+return opts;}else{return [];}}
+var getOpts = this.parseGetStr();for(var x in getOpts){this[x] = getOpts[x];}
+if(!this["tunnelURI"]){this.tunnelURI = [	"/who/", escape(this.userid), "/s/",this.getRandStr(), "/kn_journal"].join("");}
+if(window["repubsubOpts"]||window["rpsOpts"]){var optObj = window["repubsubOpts"]||window["rpsOpts"];for(var x in optObj){this[x] = optObj[x];}}
+this.tunnelCloseCallback = function(){dojo.io.setIFrameSrc(this.rcvNode, this.initDoc+"?callback=repubsub.rcvNodeReady&domain="+document.domain);}
+this.receiveEventFromTunnel = function(evt, srcWindow){if(!evt["elements"]){this.log("bailing! event received without elements!", "error");return;}
+var e = {};for(var i=0; i<evt.elements.length; i++){var ee = evt.elements[i];e[ee.name||ee.nameU] = (ee.value||ee.valueU);this.log("[event]: "+(ee.name||ee.nameU)+": "+e[ee.name||ee.nameU]);}
+this.dispatch(e);}
+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(".");}
+this.parseCookie = function(){var cs = document.cookie;var keypairs = cs.split(";");for(var x=0; x<keypairs.length; x++){keypairs[x] = keypairs[x].split("=");if(x!=keypairs.length-1){ cs+=";"; }}
+return keypairs;}
+this.setCookie = function(keypairs, clobber){if((clobber)&&(clobber==true)){ document.cookie = ""; }
+var cs = "";for(var x=0; x<keypairs.length; x++){cs += keypairs[x][0]+"="+keypairs[x][1];if(x!=keypairs.length-1){ cs+=";"; }}
+document.cookie = cs;}
+this.log = function(str, lvl){if(!this.debug){ return; }
+while(this.logBacklog.length>0){if(!this.canLog){ break; }
+var blo = this.logBacklog.shift();this.writeLog("["+blo[0]+"]: "+blo[1], blo[2]);}
+this.writeLog(str, lvl);}
+this.writeLog = function(str, lvl){dojo.debug(((new Date()).toLocaleTimeString())+": "+str);}
+this.init = function(){this.widenDomain();this.openTunnel();this.isInitialized = true;while(this.subscriptionBacklog.length){this.subscribe.apply(this, this.subscriptionBacklog.shift());}}
+this.clobber = function(){if(this.rcvNode){this.setCookie( [
+[this.tunnelFrameKey,"closed"],["path","/"]
+], false
+);}}
+this.openTunnel = function(){this.rcvNodeName = "rcvIFrame_"+this.getRandStr();this.setCookie( [
+[this.tunnelFrameKey,this.rcvNodeName],["path","/"]
+], false
+);this.rcvNode = dojo.io.createIFrame(this.rcvNodeName);dojo.io.setIFrameSrc(this.rcvNode, this.initDoc+"?callback=repubsub.rcvNodeReady&domain="+document.domain);this.sndNodeName = "sndIFrame_"+this.getRandStr();this.sndNode = dojo.io.createIFrame(this.sndNodeName);dojo.io.setIFrameSrc(this.sndNode, this.initDoc+"?callback=repubsub.sndNodeReady&domain="+document.domain);}
+this.rcvNodeReady = function(){var statusURI = [this.tunnelURI, '/kn_status/', this.getRandStr(), '_',String(this.tunnelInitCount++)].join("");this.log("rcvNodeReady");var initURIArr = [	this.serverBaseURL, "/kn?kn_from=", escape(this.tunnelURI),"&kn_id=", escape(this.tunnelID), "&kn_status_from=",escape(statusURI)];dojo.io.setIFrameSrc(this.rcvNode, initURIArr.join(""));this.subscribe(statusURI, this, "statusListener", true);this.log(initURIArr.join(""));}
+this.sndNodeReady = function(){this.canSnd = true;this.log("sndNodeReady");this.log(this.backlog.length);if(this.backlog.length > 0){this.dequeueEvent();}}
+this.statusListener = function(evt){this.log("status listener called");this.log(evt.status, "info");}
+this.dispatch = function(evt){if(evt["to"]||evt["kn_routed_from"]){var rf = evt["to"]||evt["kn_routed_from"];var topic = rf.split(this.serverBaseURL, 2)[1];if(!topic){topic = rf;}
+this.log("[topic] "+topic);if(topic.length>3){if(topic.slice(0, 3)=="/kn"){topic = topic.slice(3);}}
+if(this.attachPathList[topic]){this.attachPathList[topic](evt);}}}
+this.subscribe = function(	topic ,toObj, toFunc, dontTellServer){if(!this.isInitialized){this.subscriptionBacklog.push([topic, toObj, toFunc, dontTellServer]);return;}
+if(!this.attachPathList[topic]){this.attachPathList[topic] = function(){ return true; }
+this.log("subscribing to: "+topic);this.topics.push(topic);}
+var revt = new dojo.io.repubsubEvent(this.tunnelURI, topic, "route");var rstr = [this.serverBaseURL+"/kn", revt.toGetString()].join("");dojo.event.kwConnect({once: true,srcObj: this.attachPathList,srcFunc: topic,adviceObj: toObj,adviceFunc: toFunc});if(!this.rcvNode){  }
+if(dontTellServer){return;}
+this.log("sending subscription to: "+topic);this.sendTopicSubToServer(topic, rstr);}
+this.sendTopicSubToServer = function(topic, str){if(!this.attachPathList[topic]["subscriptions"]){this.enqueueEventStr(str);this.attachPathList[topic].subscriptions = 0;}
+this.attachPathList[topic].subscriptions++;}
+this.unSubscribe = function(topic, toObj, toFunc){dojo.event.kwDisconnect({srcObj: this.attachPathList,srcFunc: topic,adviceObj: toObj,adviceFunc: toFunc});}
+this.publish = function(topic, event){var evt = dojo.io.repubsubEvent.initFromProperties(event);evt.to = topic;var evtURLParts = [];evtURLParts.push(this.serverBaseURL+"/kn");evtURLParts.push(evt.toGetString());this.enqueueEventStr(evtURLParts.join(""));}
+this.enqueueEventStr = function(evtStr){this.log("enqueueEventStr");this.backlog.push(evtStr);this.dequeueEvent();}
+this.dequeueEvent = function(force){this.log("dequeueEvent");if(this.backlog.length <= 0){ return; }
+if((this.canSnd)||(force)){dojo.io.setIFrameSrc(this.sndNode, this.backlog.shift()+"&callback=repubsub.sndNodeReady");this.canSnd = false;}else{this.log("sndNode not available yet!", "debug");}}}
+dojo.io.repubsubEvent = function(to, from, method, id, routeURI, payload, dispname, uid){this.to = to;this.from = from;this.method = method||"route";this.id = id||repubsub.getRandStr();this.uri = routeURI;this.displayname = dispname||repubsub.displayname;this.userid = uid||repubsub.userid;this.payload = payload||"";this.flushChars = 4096;this.initFromProperties = function(evt){if(evt.constructor = dojo.io.repubsubEvent){for(var x in evt){this[x] = evt[x];}}else{for(var x in evt){if(typeof this.forwardPropertiesMap[x] == "string"){this[this.forwardPropertiesMap[x]] = evt[x];}else{this[x] = evt[x];}}}}
+this.toGetString = function(noQmark){var qs = [ ((noQmark) ? "" : "?") ];for(var x=0; x<this.properties.length; x++){var tp = this.properties[x];if(this[tp[0]]){qs.push(tp[1]+"="+encodeURIComponent(String(this[tp[0]])));}}
+return qs.join("&");}}
+dojo.io.repubsubEvent.prototype.properties = [["from", "kn_from"], ["to", "kn_to"],["method", "do_method"], ["id", "kn_id"],["uri", "kn_uri"],["displayname", "kn_displayname"],["userid", "kn_userid"],["payload", "kn_payload"],["flushChars", "kn_response_flush"],["responseFormat", "kn_response_format"] ];dojo.io.repubsubEvent.prototype.forwardPropertiesMap = {};dojo.io.repubsubEvent.prototype.reversePropertiesMap = {};for(var x=0; x<dojo.io.repubsubEvent.prototype.properties.length; x++){var tp = dojo.io.repubsubEvent.prototype.properties[x];dojo.io.repubsubEvent.prototype.reversePropertiesMap[tp[0]] = tp[1];dojo.io.repubsubEvent.prototype.forwardPropertiesMap[tp[1]] = tp[0];}
+dojo.io.repubsubEvent.initFromProperties = function(evt){var eventObj = new dojo.io.repubsubEvent();eventObj.initFromProperties(evt);return eventObj;}

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

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/RhinoIO.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/RhinoIO.js?view=auto&rev=479226
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/RhinoIO.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/RhinoIO.js Sat Nov 25 14:58:38 2006
@@ -0,0 +1,16 @@
+
+dojo.provide("dojo.io.RhinoIO");dojo.require("dojo.io.common");dojo.require("dojo.lang.func");dojo.require("dojo.lang.array");dojo.require("dojo.string.extras");dojo.io.RhinoHTTPTransport = new function(){this.canHandle = function(req){if(dojo.lang.find(["text/plain", "text/html", "text/xml", "text/javascript", "text/json", "application/json"],(req.mimetype.toLowerCase() || "")) < 0){return false;}
+if(req.url.substr(0, 7) != "http://"){return false;}
+return true;}
+function doLoad(req, conn){var ret;if (req.method.toLowerCase() == "head"){}else{var stream = conn.getContent();var reader = new java.io.BufferedReader(new java.io.InputStreamReader(stream));var text = "";var line = null;while((line = reader.readLine()) != null){text += line;}
+if(req.mimetype == "text/javascript"){try{ret = dj_eval(text);}catch(e){dojo.debug(e);dojo.debug(text);ret = null;}}else if(req.mimetype == "text/json" || req.mimetype == "application/json"){try{ret = dj_eval("("+text+")");}catch(e){dojo.debug(e);dojo.debug(text);ret = false;}}else{ret = text;}}
+req.load("load", ret, req);}
+function connect(req){var content = req.content || {};var query;if (req.sendTransport){content["dojo.transport"] = "rhinohttp";}
+if(req.postContent){query = req.postContent;}else{query = dojo.io.argsFromMap(content, req.encoding);}
+var url_text = req.url;if(req.method.toLowerCase() == "get" && query != ""){url_text = url_text + "?" + query;}
+var url  = new java.net.URL(url_text);var conn = url.openConnection();conn.setRequestMethod(req.method.toUpperCase());if(req.headers){for(var header in req.headers){if(header.toLowerCase() == "content-type" && !req.contentType){req.contentType = req.headers[header];}else{conn.setRequestProperty(header, req.headers[header]);}}}
+if(req.contentType){conn.setRequestProperty("Content-Type", req.contentType);}
+if(req.method.toLowerCase() == "post"){conn.setDoOutput(true);var output_stream = conn.getOutputStream();var byte_array = (new java.lang.String(query)).getBytes();output_stream.write(byte_array, 0, byte_array.length);}
+conn.connect();doLoad(req, conn);}
+this.bind = function(req){var async = req["sync"] ? false : true;if (async){setTimeout(dojo.lang.hitch(this, function(){connect(req);}), 1);} else {connect(req);}}
+dojo.io.transports.addTransport("RhinoHTTPTransport");}

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

Added: tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/ScriptSrcIO.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/ScriptSrcIO.js?view=auto&rev=479226
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/ScriptSrcIO.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/io/ScriptSrcIO.js Sat Nov 25 14:58:38 2006
@@ -0,0 +1,62 @@
+
+dojo.provide("dojo.io.ScriptSrcIO");dojo.require("dojo.io.BrowserIO");dojo.require("dojo.undo.browser");dojo.io.ScriptSrcTransport = new function(){this.preventCache = false;this.maxUrlLength = 1000;this.inFlightTimer = null;this.DsrStatusCodes = {Continue: 100,Ok: 200,Error: 500};this.startWatchingInFlight = function(){if(!this.inFlightTimer){this.inFlightTimer = setInterval("dojo.io.ScriptSrcTransport.watchInFlight();", 100);}}
+this.watchInFlight = function(){var totalCount = 0;var doneCount = 0;for(var param in this._state){totalCount++;var currentState = this._state[param];if(currentState.isDone){doneCount++;delete this._state[param];}else if(!currentState.isFinishing){var listener = currentState.kwArgs;try{if(currentState.checkString && eval("typeof(" + currentState.checkString + ") != 'undefined'")){currentState.isFinishing = true;this._finish(currentState, "load");doneCount++;delete this._state[param];}else if(listener.timeoutSeconds && listener.timeout){if(currentState.startTime + (listener.timeoutSeconds * 1000) < (new Date()).getTime()){currentState.isFinishing = true;this._finish(currentState, "timeout");doneCount++;delete this._state[param];}}else if(!listener.timeoutSeconds){doneCount++;}}catch(e){currentState.isFinishing = true;this._finish(currentState, "error", {status: this.DsrStatusCodes.Error, response: e});}}}
+if(doneCount >= totalCount){clearInterval(this.inFlightTimer);this.inFlightTimer = null;}}
+this.canHandle = function(kwArgs){return dojo.lang.inArray(["text/javascript", "text/json", "application/json"], (kwArgs["mimetype"].toLowerCase()))
+&& (kwArgs["method"].toLowerCase() == "get")
+&& !(kwArgs["formNode"] && dojo.io.formHasFile(kwArgs["formNode"]))
+&& (!kwArgs["sync"] || kwArgs["sync"] == false)
+&& !kwArgs["file"]
+&& !kwArgs["multipart"];}
+this.removeScripts = function(){var scripts = document.getElementsByTagName("script");for(var i = 0; scripts && i < scripts.length; i++){var scriptTag = scripts[i];if(scriptTag.className == "ScriptSrcTransport"){var parent = scriptTag.parentNode;parent.removeChild(scriptTag);i--;}}}
+this.bind = function(kwArgs){var url = kwArgs.url;var query = "";if(kwArgs["formNode"]){var ta = kwArgs.formNode.getAttribute("action");if((ta)&&(!kwArgs["url"])){ url = ta; }
+var tp = kwArgs.formNode.getAttribute("method");if((tp)&&(!kwArgs["method"])){ kwArgs.method = tp; }
+query += dojo.io.encodeForm(kwArgs.formNode, kwArgs.encoding, kwArgs["formFilter"]);}
+if(url.indexOf("#") > -1) {dojo.debug("Warning: dojo.io.bind: stripping hash values from url:", url);url = url.split("#")[0];}
+var urlParts = url.split("?");if(urlParts && urlParts.length == 2){url = urlParts[0];query += (query ? "&" : "") + urlParts[1];}
+if(kwArgs["backButton"] || kwArgs["back"] || kwArgs["changeUrl"]){dojo.undo.browser.addToHistory(kwArgs);}
+var id = kwArgs["apiId"] ? kwArgs["apiId"] : "id" + this._counter++;var content = kwArgs["content"];var jsonpName = kwArgs.jsonParamName;if(kwArgs.sendTransport || jsonpName) {if (!content){content = {};}
+if(kwArgs.sendTransport){content["dojo.transport"] = "scriptsrc";}
+if(jsonpName){content[jsonpName] = "dojo.io.ScriptSrcTransport._state." + id + ".jsonpCall";}}
+if(kwArgs.postContent){query = kwArgs.postContent;}else if(content){query += ((query) ? "&" : "") + dojo.io.argsFromMap(content, kwArgs.encoding, jsonpName);}
+if(kwArgs["apiId"]){kwArgs["useRequestId"] = true;}
+var state = {"id": id,"idParam": "_dsrid=" + id,"url": url,"query": query,"kwArgs": kwArgs,"startTime": (new Date()).getTime(),"isFinishing": false};if(!url){this._finish(state, "error", {status: this.DsrStatusCodes.Error, statusText: "url.none"});return;}
+if(content && content[jsonpName]){state.jsonp = content[jsonpName];state.jsonpCall = function(data){if(data["Error"]||data["error"]){if(dojo["json"] && dojo["json"]["serialize"]){dojo.debug(dojo.json.serialize(data));}
+dojo.io.ScriptSrcTransport._finish(this, "error", data);}else{dojo.io.ScriptSrcTransport._finish(this, "load", data);}};}
+if(kwArgs["useRequestId"] || kwArgs["checkString"] || state["jsonp"]){this._state[id] = state;}
+if(kwArgs["checkString"]){state.checkString = kwArgs["checkString"];}
+state.constantParams = (kwArgs["constantParams"] == null ? "" : kwArgs["constantParams"]);if(kwArgs["preventCache"] ||
+(this.preventCache == true && kwArgs["preventCache"] != false)){state.nocacheParam = "dojo.preventCache=" + new Date().valueOf();}else{state.nocacheParam = "";}
+var urlLength = state.url.length + state.query.length + state.constantParams.length
++ state.nocacheParam.length + this._extraPaddingLength;if(kwArgs["useRequestId"]){urlLength += state.idParam.length;}
+if(!kwArgs["checkString"] && kwArgs["useRequestId"]
+&& !state["jsonp"] && !kwArgs["forceSingleRequest"]
+&& urlLength > this.maxUrlLength){if(url > this.maxUrlLength){this._finish(state, "error", {status: this.DsrStatusCodes.Error, statusText: "url.tooBig"});return;}else{this._multiAttach(state, 1);}}else{var queryParams = [state.constantParams, state.nocacheParam, state.query];if(kwArgs["useRequestId"] && !state["jsonp"]){queryParams.unshift(state.idParam);}
+var finalUrl = this._buildUrl(state.url, queryParams);state.finalUrl = finalUrl;this._attach(state.id, finalUrl);}
+this.startWatchingInFlight();}
+this._counter = 1;this._state = {};this._extraPaddingLength = 16;this._buildUrl = function(url, nameValueArray){var finalUrl = url;var joiner = "?";for(var i = 0; i < nameValueArray.length; i++){if(nameValueArray[i]){finalUrl += joiner + nameValueArray[i];joiner = "&";}}
+return finalUrl;}
+this._attach = function(id, url){var element = document.createElement("script");element.type = "text/javascript";element.src = url;element.id = id;element.className = "ScriptSrcTransport";document.getElementsByTagName("head")[0].appendChild(element);}
+this._multiAttach = function(state, part){if(state.query == null){this._finish(state, "error", {status: this.DsrStatusCodes.Error, statusText: "query.null"});return;}
+if(!state.constantParams){state.constantParams = "";}
+var queryMax = this.maxUrlLength - state.idParam.length
+- state.constantParams.length - state.url.length
+- state.nocacheParam.length - this._extraPaddingLength;var isDone = state.query.length < queryMax;var currentQuery;if(isDone){currentQuery = state.query;state.query = null;}else{var ampEnd = state.query.lastIndexOf("&", queryMax - 1);var eqEnd = state.query.lastIndexOf("=", queryMax - 1);if(ampEnd > eqEnd || eqEnd == queryMax - 1){currentQuery = state.query.substring(0, ampEnd);state.query = state.query.substring(ampEnd + 1, state.query.length)}else{currentQuery = state.query.substring(0, queryMax);var queryName = currentQuery.substring((ampEnd == -1 ? 0 : ampEnd + 1), eqEnd);state.query = queryName + "=" + state.query.substring(queryMax, state.query.length);}}
+var queryParams = [currentQuery, state.idParam, state.constantParams, state.nocacheParam];if(!isDone){queryParams.push("_part=" + part);}
+var url = this._buildUrl(state.url, queryParams);this._attach(state.id + "_" + part, url);}
+this._finish = function(state, callback, event){if(callback != "partOk" && !state.kwArgs[callback] && !state.kwArgs["handle"]){if(callback == "error"){state.isDone = true;throw event;}}else{switch(callback){case "load":
+var response = event ? event.response : null;if(!response){response = event;}
+state.kwArgs[(typeof state.kwArgs.load == "function") ? "load" : "handle"]("load", response, event, state.kwArgs);state.isDone = true;break;case "partOk":
+var part = parseInt(event.response.part, 10) + 1;if(event.response.constantParams){state.constantParams = event.response.constantParams;}
+this._multiAttach(state, part);state.isDone = false;break;case "error":
+state.kwArgs[(typeof state.kwArgs.error == "function") ? "error" : "handle"]("error", event.response, event, state.kwArgs);state.isDone = true;break;default:
+state.kwArgs[(typeof state.kwArgs[callback] == "function") ? callback : "handle"](callback, event, event, state.kwArgs);state.isDone = true;}}}
+dojo.io.transports.addTransport("ScriptSrcTransport");}
+if(typeof window != "undefined"){window.onscriptload = function(event){var state = null;var transport = dojo.io.ScriptSrcTransport;if(transport._state[event.id]){state = transport._state[event.id];}else{var tempState;for(var param in transport._state){tempState = transport._state[param];if(tempState.finalUrl && tempState.finalUrl == event.id){state = tempState;break;}}
+if(state == null){var scripts = document.getElementsByTagName("script");for(var i = 0; scripts && i < scripts.length; i++){var scriptTag = scripts[i];if(scriptTag.getAttribute("class") == "ScriptSrcTransport"
+&& scriptTag.src == event.id){state = transport._state[scriptTag.id];break;}}}
+if(state == null){throw "No matching state for onscriptload event.id: " + event.id;}}
+var callbackName = "error";switch(event.status){case dojo.io.ScriptSrcTransport.DsrStatusCodes.Continue:
+callbackName = "partOk";break;case dojo.io.ScriptSrcTransport.DsrStatusCodes.Ok:
+callbackName = "load";break;}
+transport._finish(state, callbackName, event);};}

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

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=479226
==============================================================================
--- 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 Sat Nov 25 14:58:38 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=479226
==============================================================================
--- 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 Sat Nov 25 14:58:38 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=479226
==============================================================================
--- 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 Sat Nov 25 14:58:38 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=479226
==============================================================================
--- 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 Sat Nov 25 14:58:38 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=479226
==============================================================================
--- 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 Sat Nov 25 14:58:38 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=479226
==============================================================================
--- 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 Sat Nov 25 14:58:38 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=479226
==============================================================================
--- 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 Sat Nov 25 14:58:38 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=479226
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/json.js Sat Nov 25 14:58:38 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=479226
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js (added)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/dojo/src/lang.js Sat Nov 25 14:58:38 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=479226
==============================================================================
--- 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 Sat Nov 25 14:58:38 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=479226
==============================================================================
--- 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 Sat Nov 25 14:58:38 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=479226
==============================================================================
--- 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 Sat Nov 25 14:58:38 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



Mime
View raw message