You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pa...@apache.org on 2013/06/10 09:47:16 UTC

[1/3] git commit: Upgrade Atmosphere to 1.0.13

Updated Branches:
  refs/heads/wicket-6.x f50e542a0 -> 047997400


Upgrade Atmosphere to 1.0.13


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/a14c74fb
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/a14c74fb
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/a14c74fb

Branch: refs/heads/wicket-6.x
Commit: a14c74fb0a313c86f7a0f28bcb6360ede9017769
Parents: a50dc36
Author: Leonid Bogdanov <le...@mail.ru>
Authored: Fri Jun 7 22:32:34 2013 +0400
Committer: Leonid Bogdanov <le...@mail.ru>
Committed: Fri Jun 7 22:35:55 2013 +0400

----------------------------------------------------------------------
 wicket-experimental/wicket-atmosphere/pom.xml   |   2 +-
 .../wicket/atmosphere/jquery.atmosphere.js      | 593 ++++++++++---------
 2 files changed, 313 insertions(+), 282 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/a14c74fb/wicket-experimental/wicket-atmosphere/pom.xml
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/pom.xml b/wicket-experimental/wicket-atmosphere/pom.xml
index b1d886f..c809b3f 100644
--- a/wicket-experimental/wicket-atmosphere/pom.xml
+++ b/wicket-experimental/wicket-atmosphere/pom.xml
@@ -27,7 +27,7 @@
 	<version>0.11-SNAPSHOT</version>
 	<packaging>jar</packaging>
 	<properties>
-		<atmosphere.version>1.0.10</atmosphere.version>
+		<atmosphere.version>1.0.13</atmosphere.version>
 	</properties>
 	<name>Wicket-Atmosphere</name>
 	<description>Wicket-Atmosphere provides integration of the Atmosphere Framework in Wicket.</description>

http://git-wip-us.apache.org/repos/asf/wicket/blob/a14c74fb/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.atmosphere.js
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.atmosphere.js b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.atmosphere.js
index 9d86ac3..2b17666 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.atmosphere.js
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/jquery.atmosphere.js
@@ -49,7 +49,7 @@ jQuery.atmosphere = function() {
     };
 
     return {
-        version : "1.0.10",
+        version : "1.0.13",
         requests : [],
         callbacks : [],
 
@@ -138,13 +138,16 @@ jQuery.atmosphere = function() {
              */
             var _response = {
                 status: 200,
+                reasonPhrase : "OK",
                 responseBody : '',
+                messages : [],
                 headers : [],
                 state : "messageReceived",
                 transport : "polling",
                 error: null,
                 request : null,
                 partialMessage : "",
+                errorHandled: false,
                 id : 0
             };
 
@@ -680,22 +683,23 @@ jQuery.atmosphere = function() {
 
                 request.close = function() {
                     _close();
-                    request.reconnect = false;
-                }
+                };
 
-                _response.request = request;
-                var prevState = _response.state;
-                _response.state = state;
-                _response.status = 200;
-                var prevTransport = _response.transport;
-                _response.transport = transport;
+                if (_response.error == null) {
+                    _response.request = request;
+                    var prevState = _response.state;
+                    _response.state = state;
+                    _response.status = 200;
+                    var prevTransport = _response.transport;
+                    _response.transport = transport;
 
-                var _body = _response.responseBody;
-                _invokeCallback();
-                _response.responseBody = _body;
+                    var _body = _response.responseBody;
+                    _invokeCallback();
+                    _response.responseBody = _body;
 
-                _response.state = prevState;
-                _response.transport = prevTransport;
+                    _response.state = prevState;
+                    _response.transport = prevTransport;
+                }
             }
 
             /**
@@ -730,41 +734,43 @@ jQuery.atmosphere = function() {
                     type : rq.method,
                     dataType: "jsonp",
                     error : function(jqXHR, textStatus, errorThrown) {
-                        if (jqXHR.status < 300) {
+                        _response.error = true;
+                        if (jqXHR.status < 300 && rq.reconnect && _requestCount++ < rq.maxReconnectOnClose) {
                             _reconnect(_jqxhr, rq);
                         } else {
-                            _prepareCallback(textStatus, "error", jqXHR.status, rq.transport);
+                            _onError(jqXHR.status, errorThrown);
                         }
                     },
                     jsonp : "jsonpTransport",
                     success: function(json) {
+                        if (rq.reconnect) {
+                            if (rq.maxRequest == -1 || rq.requestCount++ < rq.maxRequest) {
+                                _readHeaders(_jqxhr, rq);
 
-                        if (rq.reconnect && (rq.maxRequest == -1 || rq.requestCount++ < rq.maxRequest)) {
-                            _readHeaders(_jqxhr, rq);
-
-                            if (!rq.executeCallbackBeforeReconnect) {
-                                _reconnect(_jqxhr, rq);
-                            }
+                                if (!rq.executeCallbackBeforeReconnect) {
+                                    _reconnect(_jqxhr, rq);
+                                }
 
-                            var msg = json.message;
-                            if (msg != null && typeof msg != 'string') {
-                                try {
-                                    msg = jQuery.stringifyJSON(msg);
-                                } catch (err) {
-                                    // The message was partial
+                                var msg = json.message;
+                                if (msg != null && typeof msg != 'string') {
+                                    try {
+                                        msg = jQuery.stringifyJSON(msg);
+                                    } catch (err) {
+                                        // The message was partial
+                                    }
                                 }
-                            }
 
-                            if (_handleProtocol(rq, msg)) {
-                                _prepareCallback(msg, "messageReceived", 200, rq.transport);
-                            }
+                                if (_handleProtocol(rq, msg)) {
+                                    _prepareCallback(msg, "messageReceived", 200, rq.transport);
+                                }
 
-                            if (rq.executeCallbackBeforeReconnect) {
-                                _reconnect(_jqxhr, rq);
+                                if (rq.executeCallbackBeforeReconnect) {
+                                    _reconnect(_jqxhr, rq);
+                                }
+                            } else {
+                                jQuery.atmosphere.log(_request.logLevel, ["JSONP reconnect maximum try reached " + _request.requestCount]);
+                                _onError(0, "maxRequest reached");
                             }
-                        } else {
-                            jQuery.atmosphere.log(_request.logLevel, ["JSONP reconnect maximum try reached " + _request.requestCount]);
-                            _onError();
                         }
                     },
                     data : rq.data,
@@ -798,39 +804,44 @@ jQuery.atmosphere = function() {
                     data = '';
                 }
 
+                var async = typeof(rq.async) != 'undefined' ? rq.async : true;
                 _jqxhr = jQuery.ajax({
                     url : url,
                     type : rq.method,
                     error : function(jqXHR, textStatus, errorThrown) {
+                        _response.error = true;
                         if (jqXHR.status < 300) {
                             _reconnect(_jqxhr, rq);
                         } else {
-                            _prepareCallback(textStatus, "error", jqXHR.status, rq.transport);
+                            _onError(jqXHR.status, errorThrown);
                         }
                     },
                     success: function(data, textStatus, jqXHR) {
 
-                        if (rq.reconnect && (rq.maxRequest == -1 || rq.requestCount++ < rq.maxRequest)) {
-                            if (!rq.executeCallbackBeforeReconnect) {
-                                _reconnect(_jqxhr, rq);
-                            }
+                        if (rq.reconnect) {
+                            if (rq.maxRequest == -1 || rq.requestCount++ < rq.maxRequest) {
+                                if (!rq.executeCallbackBeforeReconnect) {
+                                    _reconnect(_jqxhr, rq);
+                                }
 
-                            if (_handleProtocol(rq, data)) {
-                                _prepareCallback(data, "messageReceived", 200, rq.transport);
-                            }
+                                if (_handleProtocol(rq, data)) {
+                                    _prepareCallback(data, "messageReceived", 200, rq.transport);
+                                }
 
-                            if (rq.executeCallbackBeforeReconnect) {
-                                _reconnect(_jqxhr, rq);
+                                if (rq.executeCallbackBeforeReconnect) {
+                                    _reconnect(_jqxhr, rq);
+                                }
+                            } else {
+                                jQuery.atmosphere.log(_request.logLevel, ["AJAX reconnect maximum try reached " + _request.requestCount]);
+                                _onError(0, "maxRequest reached");
                             }
-                        } else {
-                            jQuery.atmosphere.log(_request.logLevel, ["AJAX reconnect maximum try reached " + _request.requestCount]);
-                            _onError();
                         }
                     },
-                    data : rq.data,
                     beforeSend : function(jqXHR) {
                         _doRequest(jqXHR, rq, false);
-                    }
+                    },
+                    crossDomain : rq.enableXDR,
+                    async: async
                 });
             }
 
@@ -911,7 +922,14 @@ jQuery.atmosphere = function() {
                     }
                     return;
                 }
-                _sse = new EventSource(location, {withCredentials: _request.withCredentials});
+
+                try {
+                     _sse = new EventSource(location, {withCredentials: _request.withCredentials});
+                } catch (e) {
+                    _onError(0, e);
+                    _reconnectWithFallbackTransport("SSE failed. Downgrading to fallback transport and resending");
+                    return;
+                }
 
                 if (_request.connectTimeout > 0) {
                     _request.id = setTimeout(function() {
@@ -943,31 +961,25 @@ jQuery.atmosphere = function() {
                         return;
                     }
 
-                    if (!_handleProtocol(_request, message.data)) return;
+                    var data = message.data;
+
+                    if (!_handleProtocol(_request, data)) return;
 
                     _response.state = 'messageReceived';
                     _response.status = 200;
 
-                    var message = message.data;
-                    var skipCallbackInvocation = _trackMessageSize(message, _request, _response);
-
-                    if (jQuery.trim(message).length == 0) {
-                        skipCallbackInvocation = true;
-                    }
-
+                    var skipCallbackInvocation = _trackMessageSize(data, _request, _response);
                     if (!skipCallbackInvocation) {
                         _invokeCallback();
                         _response.responseBody = '';
+                        _response.messages = [];
                     }
                 };
 
                 _sse.onerror = function(message) {
 
                     clearTimeout(_request.id);
-                    _response.state = 'closed';
-                    _response.responseBody = "";
-                    _response.status = !sseOpened ? 501 : 200;
-                    _invokeCallback();
+                    _invokeClose(sseOpened);
                     _clearState();
 
                     if (_abordingConnection) {
@@ -980,9 +992,10 @@ jQuery.atmosphere = function() {
                                 _executeSSE(true);
                             }, _request.reconnectInterval);
                             _response.responseBody = "";
+                            _response.messages = [];
                         } else {
                             jQuery.atmosphere.log(_request.logLevel, ["SSE reconnect maximum try reached " + _requestCount]);
-                            _onError();
+                            _onError(0, "maxReconnectOnClose reached");
                         }
                     }
                 };
@@ -1024,7 +1037,6 @@ jQuery.atmosphere = function() {
                 }
 
                 _websocket = _getWebSocket(location);
-
                 if (_request.connectTimeout > 0) {
                     _request.id = setTimeout(function() {
                         if (!webSocketOpened) {
@@ -1042,15 +1054,15 @@ jQuery.atmosphere = function() {
                             return;
                         }
 
-                        _request.id = setTimeout(function() {
-                            setTimeout(function () {
-                                _clearState();
-                            }, _request.reconnectInterval)
-                        }, _request.timeout);
-
                     }, _request.connectTimeout);
                 }
 
+                _request.id = setTimeout(function() {
+                    setTimeout(function () {
+                        _clearState();
+                    }, _request.reconnectInterval)
+                }, _request.timeout);
+
                 _websocket.onopen = function(message) {
                     if (_request.logLevel == 'debug') {
                         jQuery.atmosphere.debug("Websocket successfully opened");
@@ -1061,6 +1073,7 @@ jQuery.atmosphere = function() {
                     }
 
                     webSocketOpened = true;
+                    _websocket.webSocketOpened = webSocketOpened;
 
                     if (_request.method == 'POST') {
                         _response.state = "messageReceived";
@@ -1077,17 +1090,18 @@ jQuery.atmosphere = function() {
                         }, _request.reconnectInterval)
                     }, _request.timeout);
 
-                    if (!_handleProtocol(_request, message.data)) return;
+                    var data = message.data;
+
+                    if (!_handleProtocol(_request, data)) return;
 
                     _response.state = 'messageReceived';
                     _response.status = 200;
 
-                    var message = message.data;
-                    var skipCallbackInvocation = _trackMessageSize(message, _request, _response);
-
+                    var skipCallbackInvocation = _trackMessageSize(data, _request, _response);
                     if (!skipCallbackInvocation) {
                         _invokeCallback();
                         _response.responseBody = '';
+                        _response.messages = [];
                     }
                 };
 
@@ -1097,6 +1111,7 @@ jQuery.atmosphere = function() {
 
                 _websocket.onclose = function(message) {
                     if (closed) return
+                    clearTimeout(_request.id);
 
                     var reason = message.reason;
                     if (reason === "") {
@@ -1132,12 +1147,7 @@ jQuery.atmosphere = function() {
                     jQuery.atmosphere.warn("Websocket closed, reason: " + reason);
                     jQuery.atmosphere.warn("Websocket closed, wasClean: " + message.wasClean);
 
-                    _response.state = 'closed';
-                    _response.responseBody = "";
-                    _response.status = !webSocketOpened ? 501 : 200;
-                    _invokeCallback();
-                    clearTimeout(_request.id);
-
+                    _invokeClose(webSocketOpened);
                     closed = true;
 
                     if (_abordingConnection) {
@@ -1150,12 +1160,13 @@ jQuery.atmosphere = function() {
                         if (_request.reconnect && _requestCount++ < _request.maxReconnectOnClose) {
                             _request.id = setTimeout(function() {
                                 _response.responseBody = "";
+                                _response.messages = [];
                                 _executeWebSocket(true);
                             }, _request.reconnectInterval);
                         } else {
                             jQuery.atmosphere.log(_request.logLevel, ["Websocket reconnect maximum try reached " + _requestCount]);
                             jQuery.atmosphere.warn("Websocket error, reason: " + message.reason);
-                            _onError();
+                            _onError(0, "maxReconnectOnClose reached");
                         }
                     }
                 };
@@ -1163,22 +1174,25 @@ jQuery.atmosphere = function() {
 
             function _handleProtocol(request, message) {
                 // The first messages is always the uuid.
-                if (request.enableProtocol && request.firstMessage) {
+                if (jQuery.trim(message) != 0 && request.enableProtocol && request.firstMessage) {
                     request.firstMessage  = false;
                     var messages =  message.split(request.messageDelimiter);
-                    request.uuid = messages[0];
-                    request.stime = messages[1];
+                    var pos = messages.length == 2 ? 0 : 1;
+                    request.uuid = jQuery.trim(messages[pos]);
+                    request.stime = jQuery.trim(messages[pos + 1]);
                     return false;
                 }
                 return true;
             }
 
-            function _onError() {
+            function _onError(code, reason) {
                 _clearState();
 
                 _response.state = 'error';
+                _response.reasonPhrase = reason;
                 _response.responseBody = "";
-                _response.status = 500;
+                _response.messages = [];
+                _response.status = code;
                 _invokeCallback();
             }
 
@@ -1202,7 +1216,7 @@ jQuery.atmosphere = function() {
                     var messageLength = 0;
                     var messageStart = message.indexOf(request.messageDelimiter);
                     while (messageStart != -1) {
-                        messageLength = message.substring(messageLength, messageStart);
+                        messageLength = jQuery.trim(message.substring(messageLength, messageStart));
                         message = message.substring(messageStart + request.messageDelimiter.length, message.length);
 
                         if (message.length == 0 || message.length < messageLength) break;
@@ -1219,8 +1233,11 @@ jQuery.atmosphere = function() {
 
                     if (messages.length != 0) {
                         response.responseBody = messages.join(request.messageDelimiter);
+                        response.messages = messages;
                         return false;
                     } else {
+                        response.responseBody = "";
+                        response.messages = [];
                         return true;
                     }
                 } else {
@@ -1245,15 +1262,16 @@ jQuery.atmosphere = function() {
                 }
 
                 _request.transport = _request.fallbackTransport;
-                var reconnect = _request.reconnect && _requestCount++ < _request.maxReconnectOnClose;
-                if (reconnect && _request.transport != 'none' || _request.transport == null) {
+                var reconnectInterval = _request.connectTimeout == -1 ? 0 : _request.connectTimeout;
+                if (_request.reconnect && _request.transport != 'none' || _request.transport == null) {
                     _request.method = _request.fallbackMethod;
                     _response.transport = _request.fallbackTransport;
+                    _request.fallbackTransport = 'none';
                     _request.id = setTimeout(function() {
                         _execute();
-                    }, _request.reconnectInterval);
-                } else if (!reconnect) {
-                    _onError();
+                    }, reconnectInterval);
+                } else {
+                    _onError(500, "Unable to reconnect with fallback transport");
                 }
             }
 
@@ -1356,6 +1374,9 @@ jQuery.atmosphere = function() {
                     rq = request;
                 }
 
+                rq.lastIndex = 0;
+                rq.readyState = 0;
+
                 // CORS fake using JSONP
                 if ((rq.transport == 'jsonp') || ((rq.enableXDR) && (jQuery.atmosphere.checkCORSSupport()))) {
                     _jsonp(rq);
@@ -1379,6 +1400,14 @@ jQuery.atmosphere = function() {
                     }
                 }
 
+                var reconnectF =  function() {
+                    if (rq.reconnect && _requestCount++ < rq.maxReconnectOnClose) {
+                        _reconnect(ajaxRequest, rq, true);
+                    } else {
+                        _onError(0, "maxReconnectOnClose reached");
+                    }
+                };
+
                 if (rq.reconnect && ( rq.maxRequest == -1 || rq.requestCount++ < rq.maxRequest)) {
                     var ajaxRequest = _buildAjaxRequest();
                     _doRequest(ajaxRequest, rq, true);
@@ -1391,160 +1420,129 @@ jQuery.atmosphere = function() {
                         _response.transport = rq.transport;
                     }
 
-                    if (!jQuery.browser.msie) {
-                        ajaxRequest.onerror = function() {
-                            try {
-                                _response.status = XMLHttpRequest.status;
-                            } catch(e) {
-                                _response.status = 500;
-                            }
+                    ajaxRequest.onabort = function () {
+                        _invokeClose(true);
+                    };
 
-                            if (!_response.status) {
-                                _response.status = 500;
-                            }
-                            _clearState();
+                    ajaxRequest.onerror = function() {
+                        _response.error = true;
+                        try {
+                            _response.status = XMLHttpRequest.status;
+                        } catch(e) {
+                            _response.status = 500;
+                        }
 
-                            if (rq.reconnect) {
-                                _reconnect(ajaxRequest, rq, true);
-                            } else {
-                                _onError();
-                            }
-                        };
-                    }
+                        if (!_response.status) {
+                            _response.status = 500;
+                        }
+                        _clearState();
+                        if (!_response.errorHandled) {
+                            reconnectF();
+                        }
+                    };
 
                     ajaxRequest.onreadystatechange = function() {
                         if (_abordingConnection) {
                             return;
                         }
-
+                        _response.error = null;
                         var skipCallbackInvocation = false;
                         var update = false;
 
-                        // Remote server disconnected us, reconnect.
-                        if (rq.transport == 'streaming'
+
+                        // Opera doesn't call onerror if the server disconnect.
+                        if (jQuery.browser.opera
+                            && rq.transport == 'streaming'
                             && rq.readyState > 2
                             && ajaxRequest.readyState == 4) {
 
                             rq.readyState = 0;
                             rq.lastIndex = 0;
 
-                            _reconnect(ajaxRequest, rq, true);
+                            reconnectF();
                             return;
                         }
 
                         rq.readyState = ajaxRequest.readyState;
 
-                        if (ajaxRequest.readyState == 4) {
-                            if (jQuery.browser.msie) {
-                                update = true;
-                            } else if (rq.transport == 'streaming') {
-                                update = true;
-                            } else if (rq.transport == 'long-polling') {
-                                update = true;
-                                clearTimeout(rq.id);
-                            }
-                        } else if (rq.transport == 'streaming' && jQuery.browser.msie && ajaxRequest.readyState >= 3) {
+                        if (rq.transport == 'streaming' && ajaxRequest.readyState >= 3) {
                             update = true;
-                        } else if (!jQuery.browser.msie && ajaxRequest.readyState == 3 && ajaxRequest.status == 200 && rq.transport != 'long-polling') {
+                        } else if (rq.transport == 'long-polling' && ajaxRequest.readyState === 4) {
                             update = true;
-                        } else {
-                            clearTimeout(rq.id);
                         }
+                        clearTimeout(rq.id);
 
                         if (update) {
+                            // MSIE 9 and lower status can be higher than 1000, Chrome can be 0
+                            var status = 0;
+                            if (ajaxRequest.readyState != 0) {
+                                status = ajaxRequest.status > 1000 ? 0 : ajaxRequest.status;
+                            }
+
+                            if (status >= 300 || status == 0) {
+                                // Prevent onerror callback to be called
+                                _response.errorHandled = true;
+                                _clearState();
+                                reconnectF();
+                                return;
+                            }
                             var responseText = ajaxRequest.responseText;
 
-                            // MSIE status can be higher than 1000, Chrome can be 0
-                            if (ajaxRequest.status >= 500 || ajaxRequest.status == 0) {
-                                if (rq.reconnect) {
-                                    _reconnect(ajaxRequest, rq, true);
-                                } else {
-                                    _onError();
+                            if (jQuery.trim(responseText.length) == 0 && rq.transport == 'long-polling') {
+                                // For browser that aren't support onabort
+                                if (!ajaxRequest.hasData) {
+                                    reconnectF();
+                                }  else {
+                                    ajaxRequest.hasData = false;
                                 }
                                 return;
                             }
+                            ajaxRequest.hasData = true;
 
                             _readHeaders(ajaxRequest, _request);
 
                             if (rq.transport == 'streaming') {
-                                var text = responseText.substring(rq.lastIndex, responseText.length);
-                                _response.isJunkEnded = true;
-
-                                //fix junk is comming in parts
-                                if (!_response.junkFull && (text.indexOf("<!-- Welcome to the Atmosphere Framework.") == -1 || text.indexOf("<!-- EOD -->") == -1)) {
-                                    return;
-                                }
-                                _response.junkFull = true;
-
-                                //if it's the start and we see the junk start
-                                //fix for reconnecting on chrome - junk is comming in parts
-                                if (rq.lastIndex == 0 && text.indexOf("<!-- Welcome to the Atmosphere Framework.") != -1 && text.indexOf("<!-- EOD -->") != -1) {
-                                    _response.isJunkEnded = false;
-                                }
-
-                                if (!_response.isJunkEnded) {
-                                    var endOfJunk = "<!-- EOD -->";
-                                    var endOfJunkLength = endOfJunk.length;
-                                    var junkEnd = text.indexOf(endOfJunk) + endOfJunkLength;
-
-                                    if (junkEnd > endOfJunkLength && junkEnd != text.length) {
-                                        _response.responseBody = text.substring(junkEnd);
-                                        //fix cached messages
-                                        skipCallbackInvocation = _trackMessageSize(_response.responseBody, rq, _response);
-                                    } else {
-                                        skipCallbackInvocation = true;
-                                    }
-                                } else {
+                                if (!jQuery.browser.opera) {
                                     var message = responseText.substring(rq.lastIndex, responseText.length);
                                     rq.lastIndex = responseText.length;
-                                    if (!_handleProtocol( _request, message)) {
-                                        _reconnect(ajaxRequest, rq, false);
+                                    if (!_handleProtocol(_request, message)) {
                                         return;
                                     }
                                     skipCallbackInvocation = _trackMessageSize(message, rq, _response);
-                                }
-                                rq.lastIndex = responseText.length;
-
-                                if (jQuery.browser.opera) {
-                                    jQuery.atmosphere.iterate(function() {
-                                        if (ajaxRequest.responseText.length > rq.lastIndex) {
+                                } else {
+                                    jQuery.atmosphere.iterate(function () {
+                                        if (_response.status != 500 && ajaxRequest.responseText.length > rq.lastIndex) {
                                             try {
                                                 _response.status = ajaxRequest.status;
-                                                _response.headers = parseHeaders(ajaxRequest.getAllResponseHeaders());
-
-                                                _readHeaders(ajaxRequest, _request);
                                             }
-                                            catch(e) {
+                                            catch (e) {
                                                 _response.status = 404;
                                             }
                                             _response.state = "messageReceived";
-                                            _response.responseBody = ajaxRequest.responseText.substring(rq.lastIndex);
+
+                                            var message = ajaxRequest.responseText.substring(rq.lastIndex);
                                             rq.lastIndex = ajaxRequest.responseText.length;
+                                            if (_handleProtocol(_request, message)) {
+                                                skipCallbackInvocation = _trackMessageSize(message, rq, _response);
+                                                if (!skipCallbackInvocation) {
+                                                    _invokeCallback();
+                                                }
 
-                                            if (!_handleProtocol( _request, _response.responseBody)) {
-                                                _reconnect(ajaxRequest, rq, false);
-                                                return;
-                                            }
-                                            _invokeCallback();
-                                            if ((rq.transport == 'streaming') && (ajaxRequest.responseText.length > rq.maxStreamingLength)) {
-                                                // Close and reopen connection on large data received
-                                                _clearState();
-                                                _doRequest(_buildAjaxRequest(), rq, true);
+                                                _verifyStreamingLength(ajaxRequest, rq);
                                             }
+                                        } else if (_response.status > 400){
+                                            rq.lastIndex = ajaxRequest.responseText.length;
+                                            return false;
                                         }
                                     }, 0);
                                 }
-
-                                if (skipCallbackInvocation) {
-                                    return;
-                                }
                             } else {
                                 if (!_handleProtocol( _request, responseText)) {
                                     _reconnect(ajaxRequest, rq, false);
                                     return;
                                 }
 
-                                _trackMessageSize(responseText, rq, _response);
+                                skipCallbackInvocation = _trackMessageSize(responseText, rq, _response);
                                 rq.lastIndex = responseText.length;
                             }
 
@@ -1572,17 +1570,15 @@ jQuery.atmosphere = function() {
                                 jQuery.atmosphere.log(rq.logLevel, ["parent.callback no longer supported with 0.8 version and up. Please upgrade"]);
                             }
 
-                            _invokeCallback();
+                            if (!skipCallbackInvocation) {
+                                _invokeCallback();
+                            }
 
                             if (rq.executeCallbackBeforeReconnect) {
                                 _reconnect(ajaxRequest, rq, false);
                             }
 
-                            if ((rq.transport == 'streaming') && (responseText.length > rq.maxStreamingLength)) {
-                                // Close and reopen connection on large data received
-                                _clearState();
-                                _doRequest(_buildAjaxRequest(), rq, true);
-                            }
+                            _verifyStreamingLength(ajaxRequest, rq);
                         }
                     };
                     ajaxRequest.send(rq.data);
@@ -1592,7 +1588,7 @@ jQuery.atmosphere = function() {
                             if (_subscribed) {
                                 setTimeout(function () {
                                     _clearState();
-                                    _execute();
+                                    _executeRequest(rq);
                                 }, rq.reconnectInterval)
                             }
                         }, rq.timeout);
@@ -1603,7 +1599,7 @@ jQuery.atmosphere = function() {
                     if (rq.logLevel == 'debug') {
                         jQuery.atmosphere.log(rq.logLevel, ["Max re-connection reached."]);
                     }
-                    _onError();
+                    _onError(0, "maxRequest reached");
                 }
             }
 
@@ -1648,13 +1644,13 @@ jQuery.atmosphere = function() {
                     if (request.trackMessageLength) {
                         ajaxRequest.setRequestHeader("X-Atmosphere-TrackMessageSize", "true")
                     }
-
-                    if (request.contentType != '') {
-                        ajaxRequest.setRequestHeader("Content-Type", request.contentType);
-                    }
                     ajaxRequest.setRequestHeader("X-Atmosphere-tracking-id", request.uuid);
                 }
 
+                if (request.contentType != '') {
+                    ajaxRequest.setRequestHeader("Content-Type", request.contentType);
+                }
+
                 jQuery.each(request.headers, function(name, value) {
                     var h = jQuery.isFunction(value) ? value.call(this, ajaxRequest, request, create, _response) : value;
                     if (h != null) {
@@ -1664,17 +1660,26 @@ jQuery.atmosphere = function() {
             }
 
             function _reconnect(ajaxRequest, request, force) {
-                var reconnect = request.reconnect && _requestCount++ < request.maxReconnectOnClose;
+                if (force || request.transport != 'streaming') {
+                    if ( request.reconnect || (request.suspend && _subscribed)) {
+                        var status = 0;
+                        if (ajaxRequest.readyState != 0) {
+                            status  = ajaxRequest.status > 1000 ? 0 : ajaxRequest.status;
+                        }
+                        _response.status = status == 0 ? 204 : status;
+                        _response.reason = status == 0 ? "Server resumed the connection or down." : "OK";
 
-                if (reconnect && force || (request.suspend && ajaxRequest.status == 200 && request.transport != 'streaming' && _subscribed)) {
-                    if (request.reconnect) {
-                        _open('re-opening', request.transport, request);
-                        request.id = setTimeout(function() {
-                            _executeRequest();
-                        }, request.reconnectInterval);
+                        var reconnectInterval = (request.connectTimeout == -1) ? 0 : request.connectTimeout;
+
+                        // Reconnect immedialtely
+                        if (!force) {
+                            request.id = setTimeout(function () {
+                                _executeRequest(request);
+                            }, reconnectInterval);
+                        } else {
+                            _executeRequest(request);
+                        }
                     }
-                } else if (!reconnect) {
-                    _onError();
                 }
             }
 
@@ -1699,21 +1704,6 @@ jQuery.atmosphere = function() {
                 var lastIndex = 0;
                 var xdrCallback = function (xdr) {
                     var responseBody = xdr.responseText;
-                    var isJunkEnded = false;
-
-                    if (responseBody.indexOf("<!-- Welcome to the Atmosphere Framework.") != -1) {
-                        isJunkEnded = true;
-                    }
-
-                    if (isJunkEnded) {
-                        var endOfJunk = "<!-- EOD -->";
-                        var endOfJunkLenght = endOfJunk.length;
-                        var junkEnd = responseBody.indexOf(endOfJunk);
-                        if (junkEnd !== -1) {
-                            responseBody = responseBody.substring(junkEnd + endOfJunkLenght + lastIndex);
-                            lastIndex += responseBody.length;
-                        }
-                    }
 
                     if (!_handleProtocol(request, responseBody)) return;
 
@@ -1744,10 +1734,8 @@ jQuery.atmosphere = function() {
                 xdr.onerror = function() {
                     // If the server doesn't send anything back to XDR will fail with polling
                     if (rq.transport != 'polling') {
-                        _prepareCallback(xdr.responseText, "error", 500, transport);
+                        _reconnect(xdr, rq, false);
                     }
-
-                    _reconnect(xdr, rq, false);
                 };
 
                 // Handles close event
@@ -1870,23 +1858,7 @@ jQuery.atmosphere = function() {
                                     clone.appendChild(cdoc.createTextNode("."));
 
                                     var text = clone.innerText;
-                                    var isJunkEnded = true;
-
-                                    if (text.indexOf("<!-- Welcome to the Atmosphere Framework.") == -1) {
-                                        isJunkEnded = false;
-                                    }
-
-                                    if (isJunkEnded) {
-                                        var endOfJunk = "<!-- EOD -->";
-                                        var endOfJunkLength = endOfJunk.length;
-                                        var junkEnd = text.indexOf(endOfJunk) + endOfJunkLength;
-
-                                        text = text.substring(junkEnd);
-                                    }
-
                                     text = text.substring(0, text.length - 1);
-
-                                    _handleProtocol(rq, text);
                                     return text;
 
                                 };
@@ -1915,11 +1887,14 @@ jQuery.atmosphere = function() {
                                     var text = readResponse();
                                     if (text.length > rq.lastIndex) {
                                         _response.status = 200;
+                                        _response.error = null;
 
-                                        // Empties response every time that it is handled
-                                        res.innerText = "";
-                                        _prepareCallback(text, "messageReceived", 200, rq.transport);
-
+                                        var message = text;
+                                        if (message.length != 0 && _handleProtocol(rq, message)) {
+                                            // Empties response every time that it is handled
+                                            res.innerText = "";
+                                            _prepareCallback(message, "messageReceived", 200, rq.transport);
+                                        }
                                         rq.lastIndex = 0;
                                     }
 
@@ -1935,12 +1910,13 @@ jQuery.atmosphere = function() {
 
                                 return false;
                             } catch (err) {
+                                _response.error = true;
                                 if (_requestCount++ < rq.maxReconnectOnClose) {
                                     rq.id = setTimeout(function() {
                                         _ieStreaming(rq);
                                     }, rq.reconnectInterval);
                                 } else {
-                                    _onError();
+                                    _onError(0, "maxReconnectOnClose reached");
                                 }
                                 doc.execCommand("Stop");
                                 doc.close();
@@ -1969,7 +1945,9 @@ jQuery.atmosphere = function() {
              */
             function _push(message) {
 
-                if (_localStorageService != null) {
+                if (_response.status == 408) {
+                    _pushOnClose(message);
+                } else if (_localStorageService != null) {
                     _pushLocal(message);
                 } else if (_activeRequest != null || _sse != null) {
                     _pushAjaxMessage(message);
@@ -1982,6 +1960,15 @@ jQuery.atmosphere = function() {
                 }
             }
 
+            function _pushOnClose(message) {
+                var rq = _getPushRequest(message);
+                rq.transport = "ajax";
+                rq.method = "GET";
+                rq.async = false;
+                rq.reconnect = false;
+                _executeRequest(rq);
+            }
+
             function _pushLocal(message) {
                 _localStorageService.send(message);
             }
@@ -1993,7 +1980,7 @@ jQuery.atmosphere = function() {
                 try {
                     if (_localStorageService) {
                         _localStorageService.localSend(message);
-                    } else {
+                    } else if (_storageService) {
                         _storageService.signal("localMessage",  jQuery.stringifyJSON({id: guid , event: message}));
                     }
                 } catch (err) {
@@ -2081,6 +2068,7 @@ jQuery.atmosphere = function() {
                     attachHeadersAsQueryString: true,
                     enableXDR: _request.enableXDR,
                     uuid : _request.uuid,
+                    messageDelimiter : '|',
                     enableProtocol : false,
                     maxReconnectOnClose : _request.maxReconnectOnClose
                 };
@@ -2095,9 +2083,6 @@ jQuery.atmosphere = function() {
             /**
              * Send a message using currently opened websocket. <br>
              *
-             * @param {string, Object}
-                *            Message to send. This is an object, string message is
-             *            saved in data member.
              */
             function _pushWebSocket(message) {
                 var msg = _getStringMessage(message);
@@ -2139,18 +2124,19 @@ jQuery.atmosphere = function() {
 
                 if (state == "messageReceived") {
                     if (_trackMessageSize(messageBody, _request, _response)) return;
+                } else {
+                    _response.responseBody = messageBody;
                 }
 
                 _response.transport = transport;
                 _response.status = errorCode;
                 _response.state = state;
-                _response.responseBody = messageBody;
 
                 _invokeCallback();
             }
 
             function _readHeaders(xdr, request) {
-                if (!request.readResponsesHeaders) {
+                if (!request.readResponsesHeaders && !request.enableProtocol) {
                     request.lastTimestamp = jQuery.now();
                     request.uuid = jQuery.atmosphere.guid();
                     return;
@@ -2206,11 +2192,21 @@ jQuery.atmosphere = function() {
                         break;
                     case "unsubscribe" :
                     case "closed" :
-                        if (typeof(f.onClose) != 'undefined') f.onClose(response);
+                        var closed = typeof(_request.closed) != 'undefined' ? _request.closed : false;
+                        if (typeof(f.onClose) != 'undefined' && !closed) f.onClose(response);
+                        _request.closed = true;
                         break;
                 }
             }
 
+            function _invokeClose(wasOpen) {
+                _response.state = 'closed';
+                _response.responseBody = "";
+                _response.messages = [];
+                _response.status = !wasOpen ? 501 : 200;
+                _invokeCallback();
+            }
+
             /**
              * Invoke request callbacks.
              *
@@ -2228,7 +2224,7 @@ jQuery.atmosphere = function() {
                 _request.reconnect = _request.mrequest;
 
                 var messages = (typeof(_response.responseBody) == 'string' && _request.trackMessageLength) ?
-                    _response.responseBody.split(_request.messageDelimiter) : new Array(_response.responseBody);
+                    (_response.messages.length>0 ? _response.messages : ['']) : new Array(_response.responseBody);
                 for (var i = 0; i < messages.length; i++) {
 
                     if (messages.length > 1 && messages[i].length == 0) {
@@ -2236,13 +2232,8 @@ jQuery.atmosphere = function() {
                     }
                     _response.responseBody = jQuery.trim(messages[i]);
 
-                    // Ugly see issue 400.
-                    if (_response.responseBody.length == 0 && _response.transport == 'streaming' && _response.state == "messageReceived") {
-                        var ua = navigator.userAgent.toLowerCase();
-                        var isAndroid = ua.indexOf("android") > -1;
-                        if (isAndroid) {
-                            continue;
-                        }
+                    if (_response.responseBody.length == 0 && _response.state == "messageReceived") {
+                        continue;
                     }
 
                     _invokeFunction(_response);
@@ -2275,17 +2266,52 @@ jQuery.atmosphere = function() {
             }
 
             /**
+             *
+             * @private
+             */
+            function _verifyStreamingLength(ajaxRequest, rq){
+                // Wait to be sure we have the full message before closing.
+                if (_response.partialMessage == "" &&
+                        (rq.transport == 'streaming') &&
+                        (ajaxRequest.responseText.length > rq.maxStreamingLength)) {
+                    _response.messages = [];
+                    _invokeClose(true);
+                    _disconnect();
+                    _clearState();
+                    _reconnect(ajaxRequest, rq, true);
+                }
+            }
+
+            /**
+             * Disconnect
+             * @private
+             */
+            function _disconnect() {
+                if (_request.enableProtocol) {
+                    var query = "X-Atmosphere-Transport=close&X-Atmosphere-tracking-id=" + _request.uuid;
+                    var url = _request.url.replace(/([?&])_=[^&]*/, query);
+                    url = url + (url === _request.url ? (/\?/.test(_request.url) ? "&" : "?") + query : "");
+
+                    if (_request.connectTimeout > -1) {
+                        jQuery.ajax({url: url, async: false, timeout: _request.connectTimeout});
+                    } else {
+                        jQuery.ajax({url: url, async: false});
+                    }
+                }
+            }
+
+            /**
              * Close request.
              *
              * @private
              */
             function _close() {
                 _request.reconnect = false;
-                _response.request = _request;
-                _subscribed = false;
                 _abordingConnection = true;
+                _response.request = _request;
                 _response.state = 'unsubscribe';
                 _response.responseBody = "";
+                _response.messages = [];
                 _response.status = 408;
                 _invokeCallback();
 
@@ -2306,7 +2332,9 @@ jQuery.atmosphere = function() {
                     _activeRequest = null;
                 }
                 if (_websocket != null) {
-                    _websocket.close();
+                    if (_websocket.webSocketOpened) {
+                        _websocket.close();
+                    }
                     _websocket = null;
                 }
                 if (_sse != null) {
@@ -2330,7 +2358,7 @@ jQuery.atmosphere = function() {
                 if (_localStorageService != null) {
                     _localStorageService.close();
                 }
-            }
+            };
 
             this.subscribe = function(options) {
                 _subscribe(options);
@@ -2349,13 +2377,17 @@ jQuery.atmosphere = function() {
                 _close();
             };
 
+            this.disconnect = function () {
+                _disconnect();
+            };
+
             this.getUrl = function() {
                 return _request.url;
             };
 
-            this.uuid = function() {
+            this.getUUID = function() {
                 return _request.uuid;
-            }
+            };
 
             this.push = function(message) {
                 _push(message);
@@ -2408,11 +2440,9 @@ jQuery.atmosphere = function() {
               var requestsClone = [].concat(jQuery.atmosphere.requests);
               for (var i = 0; i < requestsClone.length; i++) {
                     var rq = requestsClone[i];
-                    if (rq.enableProtocol()) {
-                        jQuery.ajax({url: rq.getUrl() + "?X-Atmosphere-Transport=close&X-Atmosphere-tracking-id=" + rq.uuid(), async:false});
-                    }
+                    rq.disconnect();
                     rq.close();
-                    clearTimeout(rq.id);
+                    clearTimeout(rq.response.request.id);
                 }
             }
             jQuery.atmosphere.requests = [];
@@ -2427,8 +2457,9 @@ jQuery.atmosphere = function() {
 
                     // Suppose you can subscribe once to an url
                     if (rq.getUrl() == url) {
+                        rq.disconnect();
                         rq.close();
-                        clearTimeout(rq.id);
+                        clearTimeout(rq.response.request.id);
                         idx = i;
                         break;
                     }
@@ -2621,8 +2652,8 @@ jQuery.atmosphere = function() {
 /*
  * jQuery stringifyJSON
  * http://github.com/flowersinthesand/jquery-stringifyJSON
- * 
- * Copyright 2011, Donghwan Kim 
+ *
+ * Copyright 2011, Donghwan Kim
  * Licensed under the Apache License, Version 2.0
  * http://www.apache.org/licenses/LICENSE-2.0
  */
@@ -2706,4 +2737,4 @@ jQuery.atmosphere = function() {
         return str("", {"": value});
     };
 
-}(jQuery));
\ No newline at end of file
+}(jQuery));


[2/3] git commit: Notify resource registration listeners only after Meteor is suspended so it can be found by uuid

Posted by pa...@apache.org.
Notify resource registration listeners only after Meteor is suspended so it can be found by uuid


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/e40cb53a
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/e40cb53a
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/e40cb53a

Branch: refs/heads/wicket-6.x
Commit: e40cb53a5a85e9ff23818fc360633e3a70b8d22c
Parents: a14c74f
Author: Leonid Bogdanov <le...@mail.ru>
Authored: Fri Jun 7 22:44:36 2013 +0400
Committer: Leonid Bogdanov <le...@mail.ru>
Committed: Fri Jun 7 22:44:36 2013 +0400

----------------------------------------------------------------------
 .../org/apache/wicket/atmosphere/AtmosphereBehavior.java  | 10 ++++------
 .../main/java/org/apache/wicket/atmosphere/EventBus.java  |  4 ++--
 .../org/apache/wicket/atmosphere/EventSubscription.java   |  4 ++--
 3 files changed, 8 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/e40cb53a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
index c434ee9..83e3de7 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/AtmosphereBehavior.java
@@ -105,24 +105,22 @@ public class AtmosphereBehavior extends Behavior
 
 		// Grab a Meteor
 		Meteor meteor = Meteor.build(request.getContainerRequest());
-		String uuid = meteor.getAtmosphereResource().uuid();
-		component.getPage().setMetaData(ATMOSPHERE_UUID, uuid);
-		findEventBus().registerPage(uuid, component.getPage());
-
 		// Add us to the listener list.
 		meteor.addListener(this);
 
 		String transport = request.getHeader(HeaderConfig.X_ATMOSPHERE_TRANSPORT);
 		if (HeaderConfig.LONG_POLLING_TRANSPORT.equalsIgnoreCase(transport))
 		{
-			// request.getContainerRequest().setAttribute(ApplicationConfig.RESUME_ON_BROADCAST,
-			// Boolean.TRUE);
 			meteor.suspend(-1, false);
 		}
 		else
 		{
 			meteor.suspend(-1);
 		}
+
+		String uuid = meteor.getAtmosphereResource().uuid();
+		component.getPage().setMetaData(ATMOSPHERE_UUID, uuid);
+		findEventBus().registerPage(uuid, component.getPage());
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/e40cb53a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
index 5154794..5f2dc44 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventBus.java
@@ -140,8 +140,8 @@ public class EventBus implements UnboundListener
 	}
 
 	/**
-	 * Returns the {@linkplain AtmosphereParameters paramters} that will be passed to the Atmosphere
-	 * JQuery plugin. You can change these parameters, for example to disable WebSockets.
+	 * Returns the {@linkplain AtmosphereParameters parameters} that will be passed to the
+	 * Atmosphere JQuery plugin. You can change these parameters, for example to disable WebSockets.
 	 * 
 	 * @return The parameters.
 	 */

http://git-wip-us.apache.org/repos/asf/wicket/blob/e40cb53a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java
index b305867..36fda28 100644
--- a/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java
+++ b/wicket-experimental/wicket-atmosphere/src/main/java/org/apache/wicket/atmosphere/EventSubscription.java
@@ -109,7 +109,7 @@ public class EventSubscription
 	}
 
 	/**
-	 * @return The filter on incomming events, a combination of the type and the
+	 * @return The filter on incoming events, a combination of the type and the
 	 *         {@link Subscribe#filter()} parameter.
 	 */
 	public Predicate<AtmosphereEvent> getFilter()
@@ -118,7 +118,7 @@ public class EventSubscription
 	}
 
 	/**
-	 * @return The context ware filter on incomming events, constructed from the
+	 * @return The context ware filter on incoming events, constructed from the
 	 *         {@link Subscribe#contextAwareFilter()} parameter.
 	 */
 	public Predicate<AtmosphereEvent> getContextAwareFilter()


[3/3] git commit: Merge pull request #14 from vonZeppelin/wicket-6.x

Posted by pa...@apache.org.
Merge pull request #14 from vonZeppelin/wicket-6.x


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/04799740
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/04799740
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/04799740

Branch: refs/heads/wicket-6.x
Commit: 047997400a1253a08f2bab5fafeca3d91b5a579e
Parents: f50e542 e40cb53
Author: Emond Papegaaij <em...@topicus.nl>
Authored: Mon Jun 10 09:41:28 2013 +0200
Committer: Emond Papegaaij <em...@topicus.nl>
Committed: Mon Jun 10 09:41:28 2013 +0200

----------------------------------------------------------------------
 wicket-experimental/wicket-atmosphere/pom.xml   |   2 +-
 .../wicket/atmosphere/AtmosphereBehavior.java   |  10 +-
 .../org/apache/wicket/atmosphere/EventBus.java  |   4 +-
 .../wicket/atmosphere/EventSubscription.java    |   4 +-
 .../wicket/atmosphere/jquery.atmosphere.js      | 593 ++++++++++---------
 5 files changed, 321 insertions(+), 292 deletions(-)
----------------------------------------------------------------------