WICKET-6523 remove timer handle as soon as possible

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

Branch: refs/heads/master
Commit: db92a09a21f770208ff1eabec728c28d7b7a1290
Parents: 830fb15
Author: Sven Meier <[email protected]>
Authored: Wed Jan 24 19:42:40 2018 +0100
Committer: Sven Meier <[email protected]>
Committed: Tue Feb 6 16:20:11 2018 +0100

----------------------------------------------------------------------
 .../wicket/ajax/AbstractAjaxTimerBehavior.java  | 16 ++++------------
 .../wicket/ajax/res/js/wicket-ajax-jquery.js    |  9 ++++++---
 wicket-core/src/test/js/timer.js                | 20 +++++++++-----------
 3 files changed, 19 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/db92a09a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
 
b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
index 7fd3606..25dd1b7 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/ajax/AbstractAjaxTimerBehavior.java
@@ -88,7 +88,7 @@ public abstract class AbstractAjaxTimerBehavior extends 
AbstractDefaultAjaxBehav
 
                if (isStopped() == false)
                {
-                       addTimeout(response);
+                       setTimeout(response);
                }
        }
 
@@ -112,23 +112,15 @@ public abstract class AbstractAjaxTimerBehavior extends 
AbstractDefaultAjaxBehav
        @Override
        protected final void respond(final AjaxRequestTarget target)
        {
-               // onTimer might remove this behavior, so keep the component
-               // so the timeout can be cleared later on
-               Component component = getComponent();
-               
                if (shouldTrigger())
                {
                        onTimer(target);
 
                        if (shouldTrigger())
                        {
-                               addTimeout(target.getHeaderResponse());
-
-                               return;
+                               setTimeout(target.getHeaderResponse());
                        }
                }
-
-               clearTimeout(component, target.getHeaderResponse());
        }
 
        /**
@@ -175,12 +167,12 @@ public abstract class AbstractAjaxTimerBehavior extends 
AbstractDefaultAjaxBehav
 
                        if (target != null)
                        {
-                               addTimeout(target.getHeaderResponse());
+                               setTimeout(target.getHeaderResponse());
                        }
                }
        }
 
-       private void addTimeout(IHeaderResponse headerResponse)
+       private void setTimeout(IHeaderResponse headerResponse)
        {
                
headerResponse.render(OnLoadHeaderItem.forScript(getJsTimeoutCall(updateInterval)));
        }

http://git-wip-us.apache.org/repos/asf/wicket/blob/db92a09a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js 
b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
index e7bb613..e8f44b2 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
+++ 
b/wicket-core/src/main/java/org/apache/wicket/ajax/res/js/wicket-ajax-jquery.js
@@ -2541,16 +2541,19 @@
                        /**
                         * Schedules a timer
                         * @param {string} timerId - the identifier for the 
timer
-                        * @param {function|string} js - the JavaScript to 
execute after the timeout
+                        * @param {function} f - the JavaScript function to 
execute after the timeout
                         * @param {number} delay - the timeout
                         */
-                       'set': function(timerId, js, delay) {
+                       'set': function(timerId, f, delay) {
                                if (typeof(Wicket.TimerHandles) === 
'undefined') {
                                        Wicket.TimerHandles = {};
                                }
 
                                Wicket.Timer.clear(timerId);
-                               Wicket.TimerHandles[timerId] = setTimeout(js, 
delay);
+                               Wicket.TimerHandles[timerId] = 
setTimeout(function() {
+                                       Wicket.Timer.clear(timerId);
+                                       f();
+                               }, delay);
                        },
 
                        /**

http://git-wip-us.apache.org/repos/asf/wicket/blob/db92a09a/wicket-core/src/test/js/timer.js
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/js/timer.js b/wicket-core/src/test/js/timer.js
index e018f24..c95c20b 100644
--- a/wicket-core/src/test/js/timer.js
+++ b/wicket-core/src/test/js/timer.js
@@ -28,8 +28,8 @@ jQuery(document).ready(function() {
 
                var timerId = 'timerId',
                        run = function() {
+                               ok(typeof(Wicket.TimerHandles[timerId]) === 
'undefined', "There is no handle to the timeout!");
                                ok("The timer is ran!");
-                               ok(Wicket.TimerHandles[timerId], "There is a 
handle to the timeout!");
                                start();
                        };
 
@@ -38,21 +38,19 @@ jQuery(document).ready(function() {
 
        test('clear', function () {
                stop();
-               expect(3);
+               expect(2);
 
                var timerId = 'timerId',
                        run = function() {
-                               ok("The timer is ran!");
-
-                               ok(Wicket.TimerHandles[timerId], "There is a 
handle to the timeout!");
-
-                               Wicket.Timer.clear(timerId);
-
-                               ok(typeof(Wicket.TimerHandles[timerId]) === 
'undefined', "There is NO handle to the timeout!");
-
-                               start();
+                               ok(false, "timeout is not called");
                        };
 
                Wicket.Timer.set('timerId', run, 1);
+               ok(Wicket.TimerHandles[timerId], "There is a handle to the 
timeout!");
+               
+               Wicket.Timer.clear(timerId);
+               ok(typeof(Wicket.TimerHandles[timerId]) === 'undefined', "There 
is no handle to the timeout!");
+
+               start();
        });
 });

Reply via email to