Repository: wicket
Updated Branches:
  refs/heads/WICKET-6523-unique-timer-id [created] edb8c370a


[WICKET-6523] unique suffix is added if more than 1 timer behaviour is added 
for the component


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

Branch: refs/heads/WICKET-6523-unique-timer-id
Commit: edb8c370a6989cbfdc1ca53b382a8e1caea3e103
Parents: 1d20044
Author: Maxim Solodovnik <solomax...@gmail.com>
Authored: Fri Jan 26 11:50:19 2018 +0700
Committer: Maxim Solodovnik <solomax...@gmail.com>
Committed: Fri Jan 26 11:50:19 2018 +0700

----------------------------------------------------------------------
 .../wicket/ajax/AbstractAjaxTimerBehavior.java  | 36 ++++++++++++++++++--
 1 file changed, 34 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/edb8c370/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..2fc9959 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
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.ajax;
 
+import java.util.List;
+
 import org.apache.wicket.Component;
 import org.apache.wicket.Page;
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
@@ -44,6 +46,7 @@ public abstract class AbstractAjaxTimerBehavior extends 
AbstractDefaultAjaxBehav
        private Duration updateInterval;
 
        private boolean stopped = false;
+       private String timerId = null;
 
        /**
         * Construct.
@@ -93,6 +96,35 @@ public abstract class AbstractAjaxTimerBehavior extends 
AbstractDefaultAjaxBehav
        }
 
        /**
+        * Can be overridden to provide different implementation
+        * 
+        * @return the unique ID of JS timer
+        */
+       protected CharSequence createTimerId()
+       {
+               StringBuilder jsId = new 
StringBuilder(getComponent().getMarkupId());
+               List<AbstractAjaxTimerBehavior> list = 
getComponent().getBehaviors(AbstractAjaxTimerBehavior.class);
+               if (list.size() != 1)
+               {
+                       for (int i = 0; i < list.size(); ++i)
+                       {
+                               if (list.get(i) == this)
+                               {
+                                       jsId.append('_').append(i);
+                               }
+                       }
+               }
+               return jsId;
+       }
+
+       private final String getTimerId() {
+               if (timerId == null) {
+                       timerId = createTimerId().toString();
+               }
+               return timerId;
+       }
+       
+       /**
         * @param updateInterval
         *            Duration between AJAX callbacks
         * @return JS script
@@ -102,7 +134,7 @@ public abstract class AbstractAjaxTimerBehavior extends 
AbstractDefaultAjaxBehav
                CharSequence js = getCallbackScript();
 
                return String.format("Wicket.Timer.set('%s', function(){%s}, 
%d);",
-                               getComponent().getMarkupId(), js, 
updateInterval.getMilliseconds());
+                               getTimerId(), js, 
updateInterval.getMilliseconds());
        }
 
        /**
@@ -187,7 +219,7 @@ public abstract class AbstractAjaxTimerBehavior extends 
AbstractDefaultAjaxBehav
 
        private void clearTimeout(Component component, IHeaderResponse 
headerResponse)
        {
-               
headerResponse.render(OnLoadHeaderItem.forScript("Wicket.Timer.clear('" + 
component.getMarkupId() + "');"));
+               
headerResponse.render(OnLoadHeaderItem.forScript("Wicket.Timer.clear('" + 
getTimerId() + "');"));
        }
 
        /**

Reply via email to