Bruce,

Apologies for the delay in answering. Thanks for your feedback. I have
merged your changes into the original example.

https://github.com/reiern70/antilia-bits/commit/0a1b14534409698b9219137666f060e04e715ed4

Example still seems to work as expected... But I did not do any extensive
testing.



On Tue, May 27, 2014 at 7:58 PM, Bruce Lombardi <brlom...@gmail.com> wrote:

> For anyone interested, and particularly for Ernesto, I have successfully
> created  a version of the InactivityTimeOutPanel that works even if the
> user changes to another browser tab. The key, which I became aware of from
> the jsfiddle links (see previous posts below is to use an absolute time for
> when a period of inactivity would result in a timeout (timeoutTime,set to
> now plus an interval,, say 5 minutes), and then when the timer fires, to
> compare the current time against the timeoutTime. This seems to avoid the
> problem of the timer slowing down when the user changes to another page.
> Reset just resets the timeoutTime to a now plus the interval. I have set
> the timer to go off in one quarter of the interval, thinking if there are
> some delays this will keep it closer to the mark.
>
> I have tested this and it seems to work fine.
>
> I only had to change the JavaScript in Ernesto's example to get everything
>  to work, and I have posted the code here:  http://pastebin.com/TWwS5hhE
> for people to see.
>
> Ernesto, It would be great if you could put this code into the JavaScript
> in your example and try it out. Then we would have a complete example to
> point people to if it works OK.
>
> Regards,
>
> Bruce
>
>
> -----Original Message-----
> From: Ernesto Reinaldo Barreiro [mailto:reier...@gmail.com]
> Sent: Friday, May 16, 2014 2:42 PM
> To: users@wicket.apache.org
> Subject: Re: Ajax timer not counting when tab doesn't have focus?
>
> Bruce.
>
> Let me see if I can find some time during weekend to play a bit with the
> links your provided and come up with a more robust solution.
>
>
> On Fri, May 16, 2014 at 3:57 PM, Bruce Lombardi <brlom...@gmail.com>
> wrote:
>
> > First, thank you  for your continuing interest. This is the best
> > support group experience  I've ever had. I hope the message come in
> > the right sequence. Lke Ernesto and other A saw the sequencing problem
> > cause by the apache server problem.
> >
> > I ran the test that Martin suggestion with  6.16.0-SNAPSHOTand got the
> > same behavior, which is what Ernesto and I suspected would happen.
> >
> > I'm sorry, but I don't know a lot about JavaScript so I'm having with
> > certain things.  I read this article in stackoverflow:
> >
> >
> > https://stackoverflow.com/questions/6032429/chrome-timeouts-interval-s
> > uspended-in-background-tabs
> >
> > Which lead to this:
> >
> >
> > http://stackoverflow.com/questions/5927284/how-can-i-make-setinterval-
> > also-work-when-a-tab-is-inactive-in-chrome
> >
> >
> > Which contained an example of a script that doesn’t work correctly (if
> > you go to it, you will see that  it walks the word "test"  across the
> screen.
> > If you go to another  tab and come back "test" hasn’t moved)
> >
> > http://jsfiddle.net/7f6DX/3/
> >
> >
> > and this example that works (does the same thing but you can see that
> > "test"  moves even when you go to another  tab - but don't go away too
> > long it will reach the end and disappear).
> >
> > http://jsfiddle.net/7f6DX/31/
> >
> > Do you think the last (working) script  could be adapted  for our
> timeout?
> >
> > Regards,
> > Bruce
> >
> >
> >
> > -----Original Message-----
> > From: Ernesto Reinaldo Barreiro [mailto:reier...@gmail.com]
> > Sent: Tuesday, May 13, 2014 1:59 AM
> > To: users@wicket.apache.org
> > Subject: Re: Ajax timer not counting when tab doesn't have focus?
> >
> > Martin,
> >
> > Thanks for pointing out this. The exact JavaScript enabling this
> > feature can be found here
> >
> >
> > https://github.com/reiern70/antilia-bits/blob/master/client-sign-out-p
> > arent/client-sign-out/src/main/java/com/antilia/signout/InactivitySign
> > OutPanel.js
> >
> > Maybe there is a memory leak in here as well... but I do not see the
> > relation with WICKET-5570 as I do not use any of the AJAX timer
> > behavior, see
> >
> >
> > https://github.com/reiern70/antilia-bits/blob/master/client-sign-out-p
> > arent/client-sign-out/src/main/java/com/antilia/signout/InactivitySign
> > OutPanel.java
> >
> > As Bruce describes the problem it sounds like if by switching to other
> > tab browser give less "priority" to the execution of JavaScript in
> > inactive tabs.
> >
> >
> >
> > On Mon, May 12, 2014 at 9:28 PM, Martin Grigorov <mgrigo...@apache.org
> > >wrote:
> >
> > > It could be that https://issues.apache.org/jira/browse/WICKET-5570
> > > is the issue.
> > > Please try with 6.16.0-SNAPSHOT if you can.
> > >
> > > Martin Grigorov
> > > Wicket Training and Consulting
> > >
> > >
> > > On Mon, May 12, 2014 at 8:02 PM, Bruce Lombardi <brlom...@gmail.com>
> > > wrote:
> > >
> > > > Thanks Ernesto.
> > > >
> > > > Yes, I do mean another browser tab. I have some new information.
> > > > The
> > > timer
> > > > seems to slow way down, but not stop counting down when the user
> > > > switches focus to another tab, either opening a new tab, or just
> > > > clicking on
> > > another
> > > > tab. This is happening in both Chrome and Firefox.
> > > >
> > > > I thought that my code was never timing out, but further
> > > > experimentation with a shorter timeout period shows that it is
> > > > doing the same thing as
> > > the
> > > > demo. That is, timing out in about 10 second when you stay on the
> > > > tab,
> > > but
> > > > taking 3 minutes or longer to timeout when if you change focus to
> > > > a different tab.
> > > >
> > > > I would appreciate it if you could look at your demo and see the
> > > > behavior and then see if you have any ideas.
> > > >
> > > > As for my code, I really feel they difference with your code are
> > > > insignificant especially now that I know the behavior is the same.
> > > >
> > > > See below for the differences.
> > > >
> > > > Thanks again,
> > > >
> > > > Bruce
> > > >
> > > >
> > > > Code.
> > > >
> > > > I have your InactivitySignOutPanel.java,
> > > > InactivitySignOutPanel.html and InactivitySignOutPanel.js from the
> > > > GitHub site with one slight
> > > modification
> > > > in InactivitySignOutPanel.java (see below).
> > > >
> > > >  I setup my panel in  a base class that serves as a superclass for
> > > > all
> > > the
> > > > Web pages in the application (extends WebPage)  I have a method
> > > > that is called to setup the timeout. Here is the method.
> > > >
> > > >         public void setupTimeout() {
> > > >
> > > >                 // Change the following value to change the
> > > > session timeout.
> > > >                 int numberOfMinutesUntilTimeout = 15;
> > > >
> > > >                 int secondsPerMinute = 60;
> > > >                 int secondsToTimeout =numberOfMinutesUntilTimeout
> > > > * secondsPerMinute;
> > > >
> > > >                 add(new InactivitySignOutPanel("timeout",
> > > > Duration.seconds(secondsToTimeout)) {
> > > >
> > > >                 private static final long serialVersionUID = 1L;
> > > >
> > > >                         protected String getOnTimeChangedFunction() {
> > > >                 return
> > > > "function(timeRemaining){if(!window.countDown) { window.countDown
> > > > = $('#countDown'); }  $(window.countDown).html(timeRemaining);}";
> > > >             }
> > > >         });
> > > >
> > > >         add( new AjaxLink<Void>("link") {
> > > >
> > > >                         private static final long serialVersionUID
> > > > = 1L;
> > > >
> > > >                         @Override
> > > >             public void onClick(AjaxRequestTarget target) {
> > > >                 // do nothing
> > > >             }
> > > >         });
> > > >         }
> > > >
> > > > Here is the core code in InactivitySignOutPanel I have just
> > > > modified the respond method to call
> > > >
> > > >
> > > > ((WebDocsSession)WebSession.get()).processLogoutorSessionExpiratio
> > > > n(
> > > > );
> > > >
> > > >
> > > setResponsePage(WebApplication.get().getApplicationSettings().getPag
> > > eE
> > > xpiredErrorPage());
> > > >
> > > > so that the application does the right thing. Note: a break point
> > > > shows that this method is never call when the user is on another tab.
> > > >
> > > >
> > > >   public InactivitySignOutPanel(String id, Duration duration) {
> > > >         this(id, Model.of(duration));
> > > >     }
> > > >
> > > >     public InactivitySignOutPanel(String id, IModel<Duration> model)
> {
> > > >         super(id, model);
> > > >         setRenderBodyOnly(true);
> > > >         add(ajaxBehavior = new AbstractDefaultAjaxBehavior() {
> > > >
> > > >                         private static final long serialVersionUID
> > > > = 1L;
> > > >
> > > >                         @Override
> > > >             protected void respond(AjaxRequestTarget target) {
> > > >                 beforeSignOut(target);
> > > >
> > > > ((WebDocsSession)WebSession.get()).processLogoutOrSessionExpiratio
> > > > n(
> > > > );
> > > >
> > > >
> > > setResponsePage(WebApplication.get().getApplicationSettings().getPag
> > > eE
> > > xpiredErrorPage());
> > > >             }
> > > >
> > > >             @Override
> > > >             protected void onBind() {
> > > >                 // panel will not be repainted, no need to markup
> > > > markup id.
> > > >             }
> > > >
> > > >             @Override
> > > >             public void renderHead(Component component,
> > > > IHeaderResponse
> > > > response) {
> > > >                 super.renderHead(component, response);
> > > >
> response.render(JavaScriptHeaderItem.forReference(JS));
> > > >             }
> > > >         });
> > > >     }
> > > >
> > > > -----Original Message-----
> > > > From: Ernesto Reinaldo Barreiro [mailto:reier...@gmail.com]
> > > > Sent: Monday, May 12, 2014 11:39 AM
> > > > To: users@wicket.apache.org
> > > > Subject: Re: Ajax timer not counting when tab doesn't have focus?
> > > >
> > > > Hi Bruce,
> > > >
> > > >
> > > > On Mon, May 12, 2014 at 4:52 PM, Bruce Lombardi
> > > > <brlom...@gmail.com>
> > > > wrote:
> > > >
> > > > > This message  is related to an original thread "Link to Wicket
> > > > > page from Javascript" but the focus is changed so much  that I
> > > > > though a new title would be better.  In the earlier thread I
> > > > > asked about linking to a Wicket page, but the real need was for
> > > > > help in implementing a session timeout that would send the user
> > > > > to a timeout page after a period of inactivity and would reset
> > > > > whenever a user clicked any button on the page.
> > > > >
> > > > >
> > > > >
> > > > > Ernesto Reinaldo Barreiro sent me links(see below) to a working
> > > > > demo that did exactly what I required. I used  that code and
> > > > > everything seemed to work perfectly. However, I have since
> > > > > discovered that my timer does not seem to function correctly if
> > > > > the user goes to another tab. It seems like the timer stops
> > > > > timing down or slows way down until the user comes back to the
> original tab.
> > > > >
> > > > > Do you mean another browser tab?
> > > >
> > > > >
> > > > >
> > > > > I checked Ernesto's demo. If I go to the demo  page and stay
> > > > > there it times out after roughly the defined 10 second timeout
> > > > > period, but if I go to the demo page, then click on another tab,
> > > > > it eventually times out, but after more than 3 minutes. My code,
> > > > > however,  never seems to seem to timeout the page if I go to
> > > > > another
> > tab.
> > > > >
> > > > > Does this happens in a all browsers? Or in particular one?
> > > >
> > > > Mind that this is just a quick "something" I build to illustrate
> > > > the idea... So, it might not be bullet proof.
> > > >
> > > >
> > > > >
> > > > > I really need this to work to  fulfill a requirement and it is
> > > > > preventing the launch of our software.  It all works fine except
> > > > > if the user goes to a different tab.
> > > > >
> > > > >
> > > > >
> > > > > Ernesto, or anyone, do you know why this is happening. Is the
> > > > > ajax timer stopping when the tab is not selected? Why is the
> > > > > demo eventually timing out while application is not (can't see
> > > > > any real difference in the code)?
> > > > >
> > > >
> > > > Without seeing your code or a quick-start app illustrating  the
> > > > problem
> > > it
> > > > might be difficult to point out what's going on.
> > > >
> > > > >
> > > > > Is there any way to get a better handle on this (e.g., firebug)?
> > > > > If the ajax timer is stopping, could something be done, perhaps
> > > > > using absolute elapsed time, to expire the session immediately
> > > > > if the user goes back to the tab?
> > > > > The latter is not ideal but might be acceptable.
> > > > >
> > > > >
> > > > >
> > > > > (Note: My session timeout in web.xml is 30 minutes, client
> > > > > timeout is
> > > > > 15 minutes, but for testing I set it to 10 seconds).
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > // Links
> > > > >
> > > > >
> > > > >
> > > > > Demo of Example
> > > > >
> > > > >
> > > > >
> > > > > http://107.170.4.97:9080/client-sign-out-demo/?0
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > Code that sets up example
> > > > >
> > > > >
> > > > >
> > > > > https://github.com/reiern70/antilia-bits/blob/master/client-sign
> > > > > -o
> > > > > ut-p
> > > > > aren
> > > > >
> > > > > t/client-sign-out-demo/src/main/java/com/antilia/HomePage.java
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > Code that provides the implementation (We have this code in
> > > > > package
> > > > >
> > > > > com.xyzco.web.docs.presentation.helpers.timeout)
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > https://github.com/reiern70/antilia-bits/tree/master/client-sign
> > > > > -o
> > > > > ut-p
> > > > > aren
> > > > >
> > > > > t/client-sign-out-demo/src/main/java/com/antilia
> > > > >
> > > > >
> > > > >
> > > > > Thanks,
> > > > >
> > > > > Bruce
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > -----Original Message-----
> > > > >
> > > > > From: Bruce Lombardi [mailto:brlom...@gmail.com]
> > > > >
> > > > > Sent: Monday, March 17, 2014 8:24 AM
> > > > >
> > > > > To: users@wicket.apache.org
> > > > >
> > > > > Subject: Re: Link to Wicket page from Javascript
> > > > >
> > > > >
> > > > >
> > > > > Thanks, this is very helpful.
> > > > >
> > > > >
> > > > >
> > > > > Bruce
> > > > >
> > > > >
> > > > >
> > > > > Sent from my iPad
> > > > >
> > > > >
> > > > >
> > > > > > On Mar 17, 2014, at 4:52 AM, Ernesto Reinaldo Barreiro
> > > > >
> > > > > <reier...@gmail.com> wrote:
> > > > >
> > > > > >
> > > > >
> > > > > > You can see it at work here
> > > > >
> > > > > >
> > > > >
> > > > > > http://107.170.4.97:9080/client-sign-out-demo/
> > > > >
> > > > > >
> > > > >
> > > > > >
> > > > >
> > > > > > On Mon, Mar 17, 2014 at 9:18 AM, Ernesto Reinaldo Barreiro <
> > > > >
> > > > > > reier...@gmail.com> wrote:
> > > > >
> > > > > >
> > > > >
> > > > > >> Martin,
> > > > >
> > > > > >>
> > > > >
> > > > > >> What I mean is something that triggers the sign out before
> > > > > >> serve side
> > > > >
> > > > > >> session expires... and trigger this expire event.
> > > > >
> > > > > >>
> > > > >
> > > > > >>
> > > > >
> > > > > >> https://github.com/reiern70/antilia-bits/blob/master/client-s
> > > > > >> ig
> > > > > >> n-ou
> > > > > >> t-
> > > > >
> > > > > >> parent/client-sign-out/src/main/java/com/antilia/signout/Inac
> > > > > >> ti
> > > > > >> vity
> > > > > >> Si
> > > > >
> > > > > >> gnOutPanel.java
> > > > >
> > > > > >>
> > > > >
> > > > > >> https://github.com/reiern70/antilia-bits/blob/master/client-s
> > > > > >> ig
> > > > > >> n-ou
> > > > > >> t-
> > > > >
> > > > > >> parent/client-sign-out/src/main/java/com/antilia/signout/Inac
> > > > > >> ti
> > > > > >> vity
> > > > > >> Si
> > > > >
> > > > > >> gnOutPanel.js
> > > > >
> > > > > >>
> > > > >
> > > > > >> The above seem to work. You use it as in
> > > > >
> > > > > >>
> > > > >
> > > > > >>
> > > > >
> > > > > >> https://github.com/reiern70/antilia-bits/blob/master/client-s
> > > > > >> ig
> > > > > >> n-ou
> > > > > >> t-
> > > > >
> > > > > >> parent/client-sign-out-demo/src/main/java/com/antilia/HomePage.
> > > > > >> java
> > > > >
> > > > > >>
> > > > >
> > > > > >>
> > > > >
> > > > > >>
> > > > >
> > > > > >>
> > > > >
> > > > > >> On Mon, Mar 17, 2014 at 9:11 AM, Martin Grigorov
> > > > >
> > > > > < <mailto:mgrigo...@apache.org> mgrigo...@apache.org>wrote:
> > > > >
> > > > > >>
> > > > >
> > > > > >>> Hi,
> > > > >
> > > > > >>>
> > > > >
> > > > > >>> On Fri, Mar 14, 2014 at 9:25 PM, Ernesto Reinaldo Barreiro <
> > > > >
> > > > > >>> reier...@gmail.com> wrote:
> > > > >
> > > > > >>>
> > > > >
> > > > > >>>> Hi,
> > > > >
> > > > > >>>>
> > > > >
> > > > > >>>> I would implement this as..
> > > > >
> > > > > >>>>
> > > > >
> > > > > >>>> 1- A JS function that counts how much time has passed since
> > > > > >>>> last
> > > > >
> > > > > >>>> AJAX request. Once a certain threshold is passed an AJAX
> > > > > >>>> request is
> > > > >
> > > > > >>>> sent to
> > > > >
> > > > > >>> the
> > > > >
> > > > > >>>> page.
> > > > >
> > > > > >>>> 2- An AbstractAjaxBehavior that is added to the page. I
> > > > > >>>> would use
> > > > >
> > > > > >>>> it as context for AJAX request on 1).
> > > > >
> > > > > >>>
> > > > >
> > > > > >>> at that time the session should be already expired.
> > > > >
> > > > > >>>
> > > > >
> > > > > >>> But this can be used to do what is needed here - Wicket will
> > > > >
> > > > > >>> redirect to the configured PageExpiredErrorPage.
> > > > >
> > > > > >>>
> > > > >
> > > > > >>>
> > > > >
> > > > > >>>> 3- On the respond of AJAXBehavior you redirect to
> > > > >
> > > > > >>>> SessionTimeoutPage
> > > > >
> > > > > >>> and
> > > > >
> > > > > >>>> invalidate the session.
> > > > >
> > > > > >>>>
> > > > >
> > > > > >>>>
> > > > >
> > > > > >>>>
> > > > >
> > > > > >>>> On Fri, Mar 14, 2014 at 8:07 PM, Bruce Lombardi
> > > > >
> > > > > >>>> <brlom...@gmail.com>
> > > > >
> > > > > >>>> wrote:
> > > > >
> > > > > >>>>
> > > > >
> > > > > >>>>> Hi,
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>> An earlier question I asked about session timeouts was
> > > > > >>>>> answered by
> > > > >
> > > > > >>> Martin
> > > > >
> > > > > >>>>> Grigorov. I am implementing his suggestion and have a
> > > > > >>>>> JQuery
> > > > >
> > > > > >>>>> script
> > > > >
> > > > > >>> what
> > > > >
> > > > > >>>>> sets a timer that times out after a certain period of
> > inactivity.
> > > > >
> > > > > >>>>> The timeout triggers a function call.  Currently,  for a
> > > > > >>>>> quick
> > > > >
> > > > > >>>>> test,  I
> > > > >
> > > > > >>> have
> > > > >
> > > > > >>>>> that function use location.href to go to an arbitrary
> > > > > >>>>> static web
> > > > >
> > > > > >>>>> page
> > > > >
> > > > > >>>> like
> > > > >
> > > > > >>>>> this:
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>> function whenUserIdle(){
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>                location.href =
> > > > >
> > > > > >>>>> 'http://www.natural-environment.com';
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>> }
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>> That works fine, but now I need to make it go to a Wicket
> > > > > >>>>> page in
> > > > >
> > > > > >>>>> my application, similar to what would happen if I had an
> > > > > >>>>> anchor
> > > > >
> > > > > >>>>> tag
> > > > >
> > > > > like:
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>> <a wicket:id=" SessionTimeoutPage"
> > > > > >>>>> href="#">SessionTimeoutPage</a>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>> But I can't figure out how to do this in the javascript
> > function.
> > > > >
> > > > > >>>>> Can anyone tell me how to call the Wicket page from the
> > > > > >>>>> javascript
> > > > >
> > > > > >>>>> function?
> > > > >
> > > > > >>>
> > > > >
> > > > > >>> You can use <script wicket:id="expirationUrl"></script> and
> > > > > >>> a
> > > > >
> > > > > >>> Label("expirationUrl", "window.expirePageUrl ='" +
> > > > >
> > > > > >>> urlFor(SessionTimeoutPage.class) + "';"); Then use it with:
> > > > >
> > > > > >>> location.href = window.expirePageUrl';
> > > > >
> > > > > >>>
> > > > >
> > > > > >>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>> Thanks,
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>>
> > > > >
> > > > > >>>>> Bruce
> > > > >
> > > > > >>>>
> > > > >
> > > > > >>>>
> > > > >
> > > > > >>>> --
> > > > >
> > > > > >>>> Regards - Ernesto Reinaldo Barreiro
> > > > >
> > > > > >>
> > > > >
> > > > > >>
> > > > >
> > > > > >>
> > > > >
> > > > > >> --
> > > > >
> > > > > >> Regards - Ernesto Reinaldo Barreiro
> > > > >
> > > > > >
> > > > >
> > > > > >
> > > > >
> > > > > >
> > > > >
> > > > > > --
> > > > >
> > > > > > Regards - Ernesto Reinaldo Barreiro
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > > --
> > > > Regards - Ernesto Reinaldo Barreiro
> > > >
> > > >
> > > > ------------------------------------------------------------------
> > > > --
> > > > - To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > > > For additional commands, e-mail: users-h...@wicket.apache.org
> > > >
> > > >
> > >
> >
> >
> >
> > --
> > Regards - Ernesto Reinaldo Barreiro
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> > For additional commands, e-mail: users-h...@wicket.apache.org
> >
> >
>
>
> --
> Regards - Ernesto Reinaldo Barreiro
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
> For additional commands, e-mail: users-h...@wicket.apache.org
>
>


-- 
Regards - Ernesto Reinaldo Barreiro

Reply via email to