Ok. So I finally figured out my javascript syntax mistake. Do not use Wicket.Ajax.registerPreCallHandler(showBusysign()) but instead without the brackets with the function: Wicket.Ajax.registerPreCallHandler(showBusysign);
This snipplet is now complete and can be used with any application: <script type="text/javascript"> /* Your web page must contain this: * <div id="busysign">Loading ...</div> */ window.onload = setupFunc; function setupFunc() { document.getElementsByTagName('body')[0].onclick = clickFunc; hideBusysign(); Wicket.Ajax.registerPreCallHandler(showBusysign); Wicket.Ajax.registerPostCallHandler(hideBusysign); Wicket.Ajax.registerFailureHandler(hideBusysign); } function hideBusysign() { document.getElementById('busysign').style.display ='none'; } function showBusysign() { document.getElementById('busysign').style.display ='inline'; } function clickFunc(eventData) { var clickedElement = (window.event) ? event.srcElement : eventData.target; if (clickedElement.tagName == 'BUTTON' || clickedElement.tagName == 'A' || clickedElement.parentNode.tagName == 'A' || (clickedElement.tagName == 'INPUT' && (clickedElement.type == 'BUTTON' || clickedElement.type == 'SUBMIT'))) { showBusysign(); } } </script> Do you think I should add it to the WIKI? ** Martin 2008/6/8 Martin Makundi <[EMAIL PROTECTED]>: > Hi! > > In my understanding it should (IMHO) be possible to hook all ajax > calls without doing anything on the server side. I think your "add > onClick to an AjaxButton" issue involves attaching specific javascript > (from the server side) to a specific button. That's not what I need, > is it? I would have to roll out a new global ajax button having the > amendments....no. That's an overkill (is it the only solution???). > > I just want the indicator to become visible whenever any ajax request > starts and the indicator to be again hidden whenever the ajax request > stops/terminates. I do not want to affect the ajax behavior itself, I > just want to add one intermediate function call. > > There should be a generic clicent-side (browser) hook or way to tweak > this. I tried chaning the body onload setupfunc to the following, > which had the result that all ajaxfallbackbuttons fell back into > normal mode: > > function setupFunc() { > document.getElementsByTagName('body')[0].onclick = clickFunc; > hideBusysign(); > Wicket.Ajax.registerPreCallHandler(showBusysign()); > Wicket.Ajax.registerPostCallHandler(hideBusysign()); > Wicket.Ajax.registerFailureHandler(hideBusysign()); > } > > So I just want to add the show/hideBusysign in addition to the > existing functionality. Do I have to fork wicket-ajax.js or is it > possible to achieve it using scripting within the markup file? > > ** > Martin > > 2008/6/8 Eyal Golan <[EMAIL PROTECTED]>: >> check my posts on "add onClick to an AjaxButton" in the users list (I >> couldn't get the URL for it ...) >> It seems that you have a similar problem. >> >> Eyal >> >> On Sat, Jun 7, 2008 at 11:41 PM, Martin Makundi < >> [EMAIL PROTECTED]> wrote: >> >>> Hi! >>> >>> Did I misunderstand something? I am not a javascript-wizard ;) I could >>> make it work perfectly with non-ajax buttons and links but it does not >>> seem to react to wicket ajax buttons. >>> >>> Here is the script code, pls take a look if there is a blatant bug (I >>> assumed I do not need to make any modifications onto the server side): >>> >>> <script type="text/javascript"> >>> /* >>> * <div id="busysign">Loading ...</div> >>> */ >>> window.onload = setupFunc; >>> >>> Wicket.Ajax.registerPreCallHandler(showBusysign()); >>> Wicket.Ajax.registerPostCallHandler(hideBusysign()); >>> Wicket.Ajax.registerFailureHandler(hideBusysign()); >>> >>> function setupFunc() { >>> document.getElementsByTagName('body')[0].onclick = clickFunc; >>> hideBusysign(); >>> } >>> >>> function hideBusysign() { >>> document.getElementById('busysign').style.display ='none'; >>> } >>> >>> function showBusysign() { >>> document.getElementById('busysign').style.display ='inline'; >>> } >>> >>> function clickFunc(eventData) { >>> var clickedElement = (window.event) ? event.srcElement : >>> eventData.target; >>> if (clickedElement.tagName == 'BUTTON' || clickedElement.tagName >>> == 'A' || clickedElement.parentNode.tagName == 'A' >>> || (clickedElement.tagName == 'INPUT' && (clickedElement.type == >>> 'BUTTON' || clickedElement.type == 'SUBMIT'))) { >>> showBusysign(); >>> } >>> } >>> </script> >>> >>> >>> ** >>> Martin >>> >>> 2008/6/7 Peter Thomas <[EMAIL PROTECTED]>: >>> > On Sat, Jun 7, 2008 at 9:47 PM, Igor Vaynberg <[EMAIL PROTECTED]> >>> > wrote: >>> > >>> >> wicket supports global javascript event handlers for this. either >>> >> search the list or look inside wicet-ajax.js, i cant recall them off >>> >> the top of my head. >>> >> >>> > >>> > They are mentioned in this thread: >>> > >>> > http://www.nabble.com/Re%3A-ajax-progress-indicator-p17020185.html >>> > >>> > >>> >> >>> >> -igor >>> >> >>> >> On Sat, Jun 7, 2008 at 8:59 AM, Martin Makundi >>> >> <[EMAIL PROTECTED]> wrote: >>> >> > Hi! >>> >> > >>> >> > I am trying to maneuvre a lightweight gmail-style busy indicator to >>> >> > stay in place whenever I click an operative button. >>> >> > >>> >> > The script seems to work fine with regular submit buttons, but I have >>> >> > not found a proper way to reset the indicator in context with ajax >>> >> > buttons and links. >>> >> > >>> >> > Is there an event I could bind this to, or do I have to push some >>> >> > javascript from the server side / tweak the wicket-ajax.js? It would >>> >> > be pretty nice if I could just overload/hook-to something on >>> >> > javascript level. >>> >> > >>> >> > Here is my code: >>> >> > >>> >> > <style type="text/css"> >>> >> > #busysign { >>> >> > display: none; >>> >> > float: right; >>> >> > background: red; >>> >> > margin-top: 5px; >>> >> > margin-right: 5px; >>> >> > z-index: 1000; >>> >> > width: 200; >>> >> > font-weight: bold; >>> >> > text-align: center; >>> >> > font-size: 1.3em; >>> >> > } >>> >> > </style> >>> >> > <script type="text/javascript"> >>> >> > window.onload = setupFunc; >>> >> > >>> >> > function setupFunc() { >>> >> > document.getElementsByTagName('body')[0].onclick = clickFunc; >>> >> > } >>> >> > >>> >> > function clickFunc(eventData) { >>> >> > var clickedElement = (window.event) ? event.srcElement : >>> >> eventData.target; >>> >> > if (clickedElement.tagName == 'BUTTON' >>> >> > || (clickedElement.tagName == 'INPUT' && (clickedElement.type == >>> >> > 'button' || clickedElement.type == 'submit'))) { >>> >> > document.getElementById('busysign').style.display ='inline'; >>> >> > } >>> >> > } >>> >> > </script> >>> >> > >>> >> > >>> >> > I would equally well appreciate if you had some alternative generic >>> >> > lightweight solution :) >>> >> > >>> >> > >>> >> > ** >>> >> > Martin >>> >> > >>> >> > --------------------------------------------------------------------- >>> >> > To unsubscribe, e-mail: [EMAIL PROTECTED] >>> >> > For additional commands, e-mail: [EMAIL PROTECTED] >>> >> > >>> >> > >>> >> >>> >> --------------------------------------------------------------------- >>> >> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> >> For additional commands, e-mail: [EMAIL PROTECTED] >>> >> >>> >> >>> > >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >> >> >> -- >> Eyal Golan >> [EMAIL PROTECTED] >> >> Visit: http://jvdrums.sourceforge.net/ >> LinkedIn: http://www.linkedin.com/in/egolan74 >> > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]